У 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), и его вывод обычно может быть asпередан в GNU (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вместо этого), что актуально для архитектур, которые существуют в любом порядке.