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