2012-07-13 2 views
-5

Я пытаюсь отобразить инструкции по сборке в двоичных файлах, но как я могу это сделать?
Как я могу узнать, является ли аргумент MOV (например) указателем или числом?
Это для образовательных целей, я знал, что есть GDB и другие инструменты.C программа для отображения в бинарных файлах

благодарит заранее!

+0

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

+0

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

ответ

1

Вы имеете в виду a disassembler? то у вас есть много инструментов, чтобы выбрать из, таких как:

  • OllyDbg
  • IDA
  • objdump

Если вы хотите интегрировать это в существующую программу, то вам необходимо разборке двигатель , например BeaEngine или diStorm.

+0

спасибо за ответ, я думаю, beaengine - это то, что я ищу, но как я могу его использовать? gcc -g -I включить -L lib/Linux.gnu.Debug -l BeaEngine_s_d disass_test.c использовать скомпилированную библиотеку и включать заголовки beaengine, но у меня все еще есть: неопределенная ссылка на 'BeaEngineVersion ', чего я не хватает? еще раз спасибо –

1

Вы можете использовать многие из библиотек внутри binutils как BFD и опкодами.

BFDBinary File Descriptor библиотека, делать манипуляции низкого уровня.

opcodes библиотека используется для сборки и демонтажа машинных инструкций.

0

Вы можете найти полезную информацию от источника до emulator, которая должна выполнить одну и ту же задачу декодирования перед выполнением моделируемой команды.

Я настоятельно рекомендую сначала настроить небольшой подмножество, в идеале голый 8086, а затем добавить расширения в той же последовательности, в которой они исторически произошли. Это поможет вам решить, что игнорировать при поиске дополнительной информации. Так что не ошеломляйтесь.

Для операции MOV операнды задаются (в наиболее общем виде) вторым байтом, байтом MOD-REG-REG/MEM. Операнды почти всегда регистры или места памяти (указатели, возможно, построенные «на лету» с использованием «регистров индексирования»). Только несколько инструкций принимает буквальное операнд (число), и только в качестве источника , и они четко обозначены в таблице, 1979 8086 Manual, на странице 180.

Смежные вопросы