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. Si può smontare in NASM, yasm, MASM, o AT & T sintassi (GNU) “
Multimedia Mike già scoperto circa --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.
Questo non è un file binario piatto. Sembra che sia un file ELF. – Calmarius
Nell'esempio sopra, ho menzionato un file ELF (file.elf) per illustrare che avevo familiarità con i principi di base del disassemblaggio. Tuttavia, il file che mi interessava smontare era assolutamente un file binario piatto. I primi byte nel file erano i primi opcode che venivano eseguiti. Non c'era l'intestazione. –
Possibile duplicato di [Come faccio a disassemblare codice x86 grezzo?] (Http://stackoverflow.com/questions/1737095/how-do-i-disassemble-raw-x86-code) –