starblue и hlovdal оба имеют части канонического ответа. Если вы хотите разобрать необработанный код i8086, вам обычно нужен синтаксис Intel, а не синтаксис AT & T, поэтому используйте:
objdump -D -Mintel,i8086 -b binary -m i386 mbr.bin
objdump -D -Mintel,i386 -b binary -m i386 foo.bin # for 32-bit code
objdump -D -Mintel,x86-64 -b binary -m i386 foo.bin # for 64-bit code
Если ваш код ELF (или a.out (или (E) COFF)), вы можете использовать краткую форму:
objdump -D -Mintel,i8086 a.out # disassembles the entire file
objdump -d -Mintel,i8086 a.out # disassembles only code sections
Для 32-битного или 64-битного кода опустите ,8086
; заголовок ELF уже содержит эту информацию.
ndisasm
, как предлагает jameslin , также является хорошим выбором, но objdump
обычно поставляется с ОС и может работать со всеми архитектурами, поддерживаемыми GNU binutils (расширенный набор поддерживаемых GCC). ), и его выходной сигнал обычно может подаваться в GNU as
(хотя ndisasm обычно можно вводить в nasm
, хотя, конечно).
Питер Кордес предполагает, что « objconv Агнера Фога очень хорош. Он ставит метки на ветви целей, что значительно упрощает понимание того, что делает код. Он может быть разобран на синтаксис NASM, YASM, MASM или AT & T (GNU). ”
Мультимедиа Майк уже узнал о --adjust-vma
; ndisasm
эквивалент - -o
опция.
Чтобы разобрать, скажем, код sh4
(я использовал для проверки один двоичный файл из Debian), используйте его с GNU binutils (почти все другие дизассемблеры ограничены одной платформой, например, x86 с ndisasm
и objconv
):
objdump -D -b binary -m sh -EL x
-m
- это машина, а -EL
означает Little Endian (для sh4eb
используйте -EB
вместо), что относится к архитектурам, которые существуют в любом порядке байтов.