Objdumpを使用してフラットバイナリファイルを逆アセンブルできますか?
私は、ELFファイルなどの構造化されたバイナリ実行可能ファイルを逆アセンブルすることに慣れています。
objdump -d file.elf
しかし、たとえばアドレス0xabcd1000にロードされるはずのフラットバイナリファイルがある場合、objdumpに逆アセンブルすることはできますか? 「--start-address = 0xabcd1000」などのオプションを指定しようとしましたが、objdumpは形式を認識しないとだけ述べています。
ファイルを逆アセンブルする方法について他のアイデアがありますが、objdumpが簡単な解決策を提供できるかどうかを知りたいと思いました。
別のフォーラムで自分の質問に対する解決策を見つけました。次のようになります。
objdump -b binary --adjust-vma=0xabcd1000 -D file.bin
私はこれをテストしましたが、動作します。
starblue および hlovdal の両方に正解の一部があります。生のi8086コードを逆アセンブルする場合、通常はAT&T構文ではなくIntel構文も必要になるため、次を使用します。
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
コードがELF(またはa.out(または(E)COFF))の場合、短い形式を使用できます。
objdump -D -Mintel,i8086 a.out # disassembles the entire file
objdump -d -Mintel,i8086 a.out # disassembles only code sections
32ビットまたは64ビットコードの場合、,8086
を省略します。 ELFヘッダーにはすでにこの情報が含まれています。
ndisasm
も jameslin で示唆されているように、良い選択ですが、objdump
は通常OSに付属しており、GNU binutils(GCCでサポートされるもののスーパーセット)、およびその出力は通常GNU as
(ndisasmの通常はnasm
しかし、もちろん)。
Peter Cordes は、「 Agner Fogのobjconv は非常に素晴らしい」と示唆しています。ブランチターゲットにラベルを付けて、コードが何をするのかを簡単に把握できるようにします。 NASM、YASM、MASM、またはAT&T(GNU)構文に分解できます。」
マルチメディアマイク すでに--adjust-vma
についてわかっています;同等のndisasm
は-o
オプションです。
たとえば、sh4
コードを逆アセンブルするには(テストにDebianの1つのバイナリを使用しました)、これをGNU binutilsとともに使用します(他のすべての逆アセンブラは、x86などの1つのプラットフォームndisasm
およびobjconv
を使用):
objdump -D -b binary -m sh -EL x
-m
はマシンであり、-EL
はリトルエンディアンを意味します(sh4eb
の代わりに-EB
を使用)。これはどちらのエンディアンにも存在するアーキテクチャに関連します。