objdumpでディスアセンブル

2012-05-18 00:00:00 +0000

objdumpを使って、バイナリのディスアセンブルしてアセンブラをに変換する方法を紹介します。

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

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

関連する記事

将棋DB2
プロ棋士からコンピューター将棋の棋譜まで観られる将棋の棋譜サービス
将棋DB iOS
将棋DB2のiOSアプリ
将棋DB Android
将棋DB2のAndroidアプリ
碁DB
プロ棋士からコンピューター囲碁の棋譜まで観られる囲碁の棋譜サービス