starblue et hlovdal ont tous deux des parties de la réponse canonique. Si vous souhaitez démonter du code i8086 brut, vous voulez généralement la syntaxe Intel, pas la syntaxe AT&T, alors utilisez:
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
Si votre code est ELF (ou a.out (ou (E) COFF)), vous pouvez utiliser la forme courte:
objdump -D -Mintel,i8086 a.out # disassembles the entire file
objdump -d -Mintel,i8086 a.out # disassembles only code sections
Pour le code 32 bits ou 64 bits, omettez le ,8086
; l'en-tête ELF contient déjà ces informations.
ndisasm
, comme suggéré par jameslin , est également un bon choix, mais il objdump
est généralement fourni avec le système d'exploitation et peut gérer toutes les architectures prises en charge par GNU binutils (un sur-ensemble de celles prises en charge par GCC), et sa sortie peut généralement être introduite dans GNU as
(ndisasm peut généralement être introduit nasm
cependant, bien sûr).
Peter Cordes suggère que « l'objconv d'Agner Fog est très gentil. Il met des étiquettes sur les cibles de branche, ce qui facilite beaucoup la compréhension de ce que fait le code. Il peut être désassemblé dans la syntaxe NASM, YASM, MASM ou AT&T (GNU). »
Multimédia Mike a déjà découvert --adjust-vma
; l' ndisasm
équivalent est l' -o
option.
Pour désassembler, disons, du sh4
code (j'ai utilisé un binaire de Debian pour tester), utilisez ceci avec les binutils GNU (presque tous les autres désassembleurs sont limités à une plate-forme, comme x86 avec ndisasm
et objconv
):
objdump -D -b binary -m sh -EL x
Le -m
est la machine, et -EL
signifie Little Endian (à sh4eb
utiliser à la -EB
place), ce qui est pertinent pour les architectures qui existent dans les deux endianness.