starblue et hlovdal ont tous deux des parties de la réponse canonique. Si vous voulez démonter code i8086 brut, vous voulez généralement la syntaxe Intel, pas AT & T syntaxe, aussi, donc utiliser:
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
32 bits ou code 64 bits, omettre le ,8086
; l'en-tête ELF inclut déjà cette information.
ndisasm
, comme suggéré par jameslin, est également un bon choix, mais objdump
vient généralement avec le système d'exploitation et peut faire face à toutes les architectures supportées par GNU binutils (sur-ensemble de ceux pris en charge par GCC), et sa sortie peuvent généralement être alimentés dans GNU as
(ndisasm peut habituellement être introduit dans nasm
bien que, bien sûr).
Peter Cordes suggère que "Agner Fog's objconv est très agréable. Il place les étiquettes sur les cibles de la branche, ce qui facilite beaucoup la compréhension du code. Il peut démonter en MSNA, yasm, MASM, ou AT & T (GNU) syntaxe « déjà
Multimedia Mike trouvé à propos de --adjust-vma
. l'équivalent ndisasm
est l'option -o
.
Pour démonter, par exemple, le code (j'ai utilisé un binaire de Debian pour tester) sh4
, utiliser avec GNU binutils (presque tous les autres désassemblé sont limitées à une plate-forme, tels que x86 avec ndisasm
et objconv
):
objdump -D -b binary -m sh -EL x
le -m
est la machine, et des moyens -EL
little endian (pour sh4eb
utilisation -EB
place), qui est pertinente pour les architectures qui existent dans les deux endianness.
pouvez-vous expliquer ce que les options que vous spécifiez faire? – Hawken
ou '--target' au lieu de' -b'. '-D' est" désassembler le contenu de toutes les sections "; '-b bfdname' ou' --target = bfdname' forcera la lecture au format de code objet spécifié (pas elf mais binaire brut dans notre cas); '-m machine' spécifiera l'architecture à utiliser (dans notre fichier il n'y a pas d'en-tête avec des informations arch). '-M options' sont des options de désassembleur; 'addr16, data16' sont utilisés pour" spécifier la taille de l'adresse par défaut et la taille de l'opérande "(traiter le code comme un i8086 dans le moteur de disasm universel x86) – osgx