Использование виртуальной машины для изучения сборки

Я нахожусь на этапах планирования, чтобы изучить язык ассемблера и хотел бы начать с сборки x86, но вокруг меня есть компьютеры с 64-разрядными процессорами (i7, i5 и Core 2 Duo) и операционными системами. Поскольку я использую свои существующие машины для работы и не хочу, чтобы что-то пошло не так во время обучения/практики, я планировал купить или построить дешевую 32-битную систему, используя старое оборудование, которое я могу найти. Но перед этим мне интересно, можно ли использовать виртуальную машину для та же цель. Будут ли выполняемые машинные инструкции ограничены только виртуальной машиной или они будут взаимодействовать с хостом виртуальной машины (т. е. с самим моим компьютером)?

Я огляделся, чтобы увидеть, если кто - то уже пробовал такую вещь, но, похоже, никто не-так, мои извинения, если мой вопрос наивен, поскольку я еще ничего не знаю о сборке. Но было бы здорово, если бы кто-то мог пролить свет на эту тему и предложить некоторые указатели для людей как я, кто хочет научиться сборке в безопасной и изолированной среде.

5 ответов


Я настоятельно рекомендую:

1) Используйте симулятор набора инструкций (наравне с тем, что вы просите). гораздо лучше видимость и больше шансов на успех, меньше разочарования, меньше шансов сдаться.

2) сначала не изучайте сборку x86. (наличие оборудования-плохое оправдание для изучения x86). очень плохая архитектура, сначала изучите хорошую архитектуру, а затем, если вы потрудитесь изучить x86, изучите ее позже, а затем изучите 8088/86, используя один из многих симуляторы/эмуляторы.

3) изучите несколько наборов инструкций, если вы начнете с хорошего, то все остальные наборы инструкций и даже языки программирования-это небольшой вопрос синтаксиса.

4) Вы не изучаете системные вызовы, что является плохим способом узнать сборку, узнать набор инструкций и как программировать с ним, системные вызовы после того, как вы узнали сборку и решили продолжить программировать приложения в нем.

MSP430 фирмы (или базе pdp11/lsi11), руки, thumb, avr, mico8 и список других намного лучше. сохраните mips для После того, как вы узнали несколько, а также, он имеет необычные функции, которые могут поставить вас в неправильное мышление для других архитектур.

Если ваши навыки программирования сильны уже тогда вы можете забрать сборку в течение нескольких дней и иметь несколько до многих наборов инструкций в течение нескольких недель. Если вы следуете этому руководству и изучаете несколько несвязанных(друг с другом) (хороших) наборов инструкций, начните смотреть на x86 увидим, почему я рекомендую изучать его в последний раз или никогда. Как 6502 и pic и некоторые другие, он имеет историческую образовательную ценность, но из-за характера истории семьи вы не можете получить много из него с точки зрения настройки/программирования. На самом деле я рекомендую прочитать Дзэн сборки и помнить, даже когда он был написан, о том, как думать о кодировании производительности в целом, а не о настройке производительности 8088/86.

хороший способ действительно узнать сборку при написании дизассемблера проблема заключается в том, что большинство наборов инструкций имеют переменную длину слова, а дизассемблеры с переменной длиной слова-продвинутая проблема программирования. Рука и большой палец (не thumb2) фиксированной длины слова и очень легко писать дизассемблеры для.


запустить с помощью в QEMU. Это легкая виртуальная машина, на которой вы можете запускать программы (raw assembly, c, C++ и т. д.), Даже не устанавливая на нее ОС.


Да вы можете выполнять Программирование сборки в виртуальной машине, и вы будете ограничены набором инструкций, предоставляемым виртуальной машиной. Если вы делаете 32-разрядную машину в 64-разрядной среде хоста, вы увидите только 32-разрядные инструкции.

для чего это стоит, Программирование сборки не является "небезопасным" в вашей среде хоста, поэтому на самом деле нет необходимости использовать виртуальную машину, если вы не хотите эмулировать другое оборудование вообще или хотите написать например, загрузчики и крошечные операционные системы.

для просто обучения сборке, хотя, я, конечно, не начал бы писать загрузчики / операционные системы, так как у вас не будет доступа к отладчикам и циклам тестирования будет долго. Начните сhttp://www.nasm.us/ чтобы узнать x86 / x86-64 сборки, или посмотреть вhttp://wiki.qemu.org/Main_Page для делать вещи как программирование руки.


попробовать Marss86

MARSSx86 (MARSS для краткости) инструмент для системы цикла точной полной моделирование архитектуры x86-64, в частности многоядерной реализации. Наша цель состоит в том, чтобы создать простой, но эффективный полный системная архитектурная среда моделирования на основе существующих инструментов.


Если вы пытаетесь изучить язык ассемблера в отношении архитектуры Arm, то мое предложение-изучить основы ниже сайтов .Вот в этих он объясняет, как to use qemu w.r.t assembly and its best place to start

http://www.bravegnu.org/gnu-eprog/index.html#intro

также http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/

Так что сверху сайта u может попробовать на виртуальной машине, как qemu не нужны real hardware