starblue e hlovdal entrambi hanno parti della risposta canonica. Se si vuole disassemblare codice i8086 cruda, di solito si vuole sintassi Intel, non AT & sintassi T, anche, in modo da utilizzare:
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
Se il codice è ELF (o a.out (o (E) COFF)), è possibile utilizzare il formato breve:
objdump -D -Mintel,i8086 a.out # disassembles the entire file
objdump -d -Mintel,i8086 a.out # disassembles only code sections
per 32-bit o 64-bit di codice, omettere il ,8086
; l'intestazione ELF include già queste informazioni.
ndisasm
, come suggerito da jameslin, è anche una buona scelta, ma objdump
solito viene fornito con il sistema operativo e possono trattare tutte le architetture supportate da binutils GNU (sovrainsieme di quelli supportati da GCC), e la sua uscita può generalmente essere alimentato in GNU as
(i ndisasm possono solitamente essere inseriti nello nasm
, naturalmente).
Peter Cordes suggerisce che "Agner Fog's objconv è molto bello. Mette le etichette sugli obiettivi delle filiali, rendendo molto più facile capire cosa fa il codice. Può essere smontato in sintassi NASM, YASM, MASM o AT & T (GNU). "
Multimedia Mike già rilevato su --adjust-vma
; l'equivalente ndisasm
è l'opzione -o
.
Per smontare, per esempio, sh4
codice (ho usato uno binario da Debian da testare), utilizzare questo con binutils GNU (quasi tutti gli altri disassemblatori sono limitate ad una piattaforma, come x86 con ndisasm
e objconv
):
objdump -D -b binary -m sh -EL x
il -m
è la macchina, e mezzi -EL
Little Endian (per sh4eb
uso -EB
invece), che è rilevante per le architetture che esistono in entrambi endianness.
puoi spiegare quali sono le opzioni specificate? – Hawken
o '--target' invece di' -b'. '-D' è" smontare il contenuto di tutte le sezioni "; '-b bfdname' o' --target = bfdname' imporrà la lettura come formato oggetto-codice specificato (non elf ma raw binary nel nostro caso); '-m machine' specificherà l'architettura da usare (nel nostro file non c'è un'intestazione con informazioni arch). '-M options' sono opzioni del disassemblatore; 'addr16, data16' sono usati per" specificare la dimensione dell'indirizzo e la dimensione dell'operando di default "(trattare il codice come i8086 nel motore di disaster universale x86) – osgx