objdumpでディスアセンブル
2012-05-18
objdumpとは
objdumpはオブジェクトファイルの情報を表示するコマンドです。
objdumpはオブジェクトファイルをディスアセンブルしてアセンブラのコードを出力することもできます。
今回はobjdumpを使ってバイナリのデコンパイルしてアセンブラをに変換する方法を紹介します。
下ごしらえ
foo.cとして次のコードを保存します。
int foo(int a, int b)
{
return a + b;
}
コンパイルします。
$ gcc -g -O0 -c foo.c
それではディスアセンブルしてみましょう。
$ objdump -S -d foo.o
foo.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <foo>:
int foo(int a, int b)
{
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 89 7d fc mov %edi,-0x4(%rbp)
7: 89 75 f8 mov %esi,-0x8(%rbp)
return a + b;
a: 8b 45 f8 mov -0x8(%rbp),%eax
d: 8b 55 fc mov -0x4(%rbp),%edx
10: 8d 04 02 lea (%rdx,%rax,1),%eax
}
13: c9 leaveq
14: c3 retq
gccを-gオプションをつけてコンパイルするとデバッグ情報がオブジェクトファイルに含まれるため、 objdumpを-Sオプションをつけて実行することでソースコードと一緒に出力することができます。
まとめ
今回はobjdumpを使ってオブジェクトファイルのディスアセンブルしてアセンブラをに変換する方法を紹介しました。
ご質問等、何かありましたらこちらへ。