starblue und hlovdal haben beide Teile der kanonischen Antwort. Wenn Sie rohe i8086 Code zerlegen wollen, Sie wollen in der Regel Intel Syntax, nicht AT & T-Syntax auch so verwenden:
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
Wenn Ihr Code ELF (oder a.out (oder (E) COFF)), können Sie das kurzes Formular verwenden:
objdump -D -Mintel,i8086 a.out # disassembles the entire file
objdump -d -Mintel,i8086 a.out # disassembles only code sections
Für 32-Bit oder 64-Bit-Code, lassen Sie die ,8086
; Der ELF-Header enthält diese Information bereits.
ndisasm
, wie jameslin vorgeschlagen, ist auch eine gute Wahl, aber objdump
kommt in der Regel mit dem Betriebssystem und kann mit allen Architekturen unterstützt durch GNU binutils (Obermenge derer unterstützt von GCC) und dessen Ausgang zugeführt werden kann in der Regel beschäftigen in GNU as
(ndisasm kann natürlich natürlich auch in nasm
eingespeist werden).
Peter Cordes schlägt vor, dass "Agner Fog's objconv ist sehr schön. Es fügt Branch-Targets Labels hinzu und macht es viel einfacher herauszufinden, was der Code tut. Es kann in NASM, YASM, MASM oder AT & T (GNU) Syntax zerlegen „
Multimedia Mike bereits herausgefunden über --adjust-vma
. Das ndisasm
entspricht der -o
Option.
zu zerlegen, sagen wir, sh4
Code (verwendete ich ein binäres von Debian zu testen), verwenden Sie diese mit GNU binutils (fast alle anderen Disassembler auf eine Plattform beschränkt sind, wie x86 mit ndisasm
und objconv
):
objdump -D -b binary -m sh -EL x
die -m
ist die Maschine, und -EL
bedeutet Little Endian (für sh4eb
Verwendung -EB
statt), die für die Architekturen relevant ist, die in entweder endianness existieren.
Dies ist keine flache Binärdatei. Es sieht so aus, als wäre es eine ELF-Datei. – Calmarius
Im obigen Beispiel habe ich eine ELF-Datei (file.elf) erwähnt, um zu verdeutlichen, dass ich mit den grundlegenden Zerlegungsprinzipien vertraut war. Allerdings war die Datei, die ich zu demontieren interessierte, absolut eine flache binäre Datei. Die ersten Bytes in der Datei waren die ersten Opcodes, die ausgeführt wurden. Es gab keinen Header. –
Mögliches Duplikat von [Wie zerlege ich rohen x86-Code?] (Http://StackOverflow.com/questions/1737095/how-do-i-disassembles-raw-x86-code) –