Есть ли инструмент командной строки для получения машинного кода для инструкции по сборке? - PullRequest
1 голос
/ 15 сентября 2010
0x042444FF; /* inc dword ptr [esp+4] */

Мне нужен этот инструмент, чтобы знать, какая часть означает inc, dword или наоборот.

Ответы [ 3 ]

1 голос
/ 15 сентября 2010

Вы можете использовать инструмент objdump для «декомпиляции» исполняемого двоичного кода обратно в код сборки, хотя из-за возможных оптимизаций результирующий код сборки может не совпадать с исходной сборкой (но они должны быть по сути похожи).

0 голосов
/ 15 сентября 2010

Следующее немного неудобно, но работает:

$ xxd -r > objdump-test.bin
0000 ff 44 24 04
$ objdump -D --target=binary --architecture i386:intel objdump-test.bin 

objdump-test.bin:     file format binary

Disassembly of section .data:

0000000000000000 <.data>:
   0:   ff 44 24 04             inc    DWORD PTR [esp+0x4]

xxd - утилита hexdump, которая может работать в обратном порядке, она является частью X11.0000 - это адрес шестнадцатеричных данных в результирующем файле.

Вы можете использовать любой другой инструмент для создания бинарного файла.

0 голосов
/ 15 сентября 2010

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

http://ref.x86asm.net/index.html

или

http://ref.x86asm.net/coder32.html

0x44 говорит вам, что это приращение. x86 имеет переменную длину, поэтому в игру вступают другие байты. Я не удивлюсь, если 0x04 - это смещение относительно esp.

...