48

objdump を使用してフラット バイナリ ファイルを逆アセンブルできますか?

以下を使用して、ELF ファイルなどの構造化されたバイナリ実行可能ファイルを逆アセンブルすることに精通しています。

objdump -d file.elf

しかし、アドレス 0xabcd1000 などにロードされることがわかっているフラット バイナリ ファイルがある場合、それを逆アセンブルするよう objdump に依頼できますか? 「--start-address=0xabcd1000」などのオプションを指定しようとしましたが、objdump はフォーマットを認識しないとだけ述べています。

ファイルを逆アセンブルする方法については他にもアイデアがありますが、objdump が簡単な解決策を提供できるかどうかを知りたいと思いました。

4

2 に答える 2

54

別のフォーラムで自分の質問に対する解決策を見つけました。これは次のようになります。

objdump -b binary --adjust-vma=0xabcd1000 -D file.bin

私はこれをテストしました、そしてそれは働きます。

于 2013-01-13T00:03:23.923 に答える
33

starbluehlovdalの両方に、標準的な回答の一部があります。生の 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 ヘッダーには、この情報が既に含まれています。

ndisasmjameslinによって提案されている も良い選択ですが、objdump通常は OS に付属しており、GNU binutils (GCC によってサポートされているもののスーパーセット) によってサポートされているすべてのアーキテクチャを処理でき、その出力は通常 GNU にフィードできますas(ndisasm は通常、もちろん、供給されnasmます)。

Peter Cordesは、「<a href="http://agner.org/optimize/" rel="noreferrer">Agner Fog の objconv は非常に優れている」と提案しています。ブランチ ターゲットにラベルを付けて、コードが何をするかを簡単に把握できるようにします。NASM、YASM、MASM、または AT&T (GNU) 構文に分解できます。」</p>

マルチメディア マイクはすでに次のことを知っていました--adjust-vmandisasm同等のものは-oオプションです。

たとえば、sh4コードを逆アセンブルするには (Debian のバイナリを 1 つ使用してテストしました)、これを GNU binutils と共に使用します (他のほとんどすべての逆アセンブラーは、x86 と など、1 つのプラットフォームに制限されていますndisasm) objconv

objdump -D -b binary -m sh -EL x

-mマシンであり、どちらかのエンディアンで存在するアーキテクチャに関連-ELするリトル エンディアン (代わりにsh4eb使用) を意味します。-EB

于 2015-12-22T20:48:37.587 に答える