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を使ってオブジェクトファイルのディスアセンブルしてアセンブラをに変換する方法を紹介しました。

ご質問等、何かありましたらこちらへ。