starblue ve hlovdal hem kanonik cevap parçaları var. Ham i8086 kodunu parçalara ayırmak istiyorsanız, AT&T sözdizimini değil, genellikle Intel sözdizimini istersiniz, bu nedenle şunu kullanın:
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
Kodunuz ELF (veya a.out (veya (E) COFF)) ise, kısa biçimi kullanabilirsiniz:
objdump -D -Mintel,i8086 a.out # disassembles the entire file
objdump -d -Mintel,i8086 a.out # disassembles only code sections
32 bit veya 64 bit kod için ,8086
; ELF başlığı bu bilgiyi zaten içeriyor.
ndisasm
, jameslin'in önerdiği gibi , iyi bir seçimdir, ancak objdump
genellikle işletim sistemi ile birlikte gelir ve GNU binutils (GCC tarafından desteklenenlerin üst kümesi) tarafından desteklenen tüm mimarilerle başa çıkabilir ve çıktısı genellikle as
GNU'ya (ndisasm'ın nasm
elbette beslenecek ).
Peter Cordes “ Agner Fog'un objconv'si çok güzel. Dal hedeflerine etiketler koyar ve kodun ne yaptığını anlamayı çok daha kolay hale getirir. NASM, YASM, MASM veya AT&T (GNU) sözdizimine bölünebilir. "
Multimedya Mike zaten öğrendi --adjust-vma
; ndisasm
eşdeğerdir -o
seçeneği.
Diyelim ki sh4
kodu sökmek için (Debian'dan bir ikiliyi test etmek için kullandım), bunu GNU ikilileriyle kullanın (hemen hemen tüm diğer çözücüler tek bir platformla sınırlıdır, örneğin x86 ndisasm
ve ile objconv
):
objdump -D -b binary -m sh -EL x
-m
Makinedir ve -EL
Küçük Endian (için anlamı sh4eb
kullanımda -EB
ya endian mevcut mimarileri için geçerlidir yerine).