objdump - オブジェクトファイルの情報を表示する

スポンサーリンク

objdumpコマンドはオブジェクトファイルの内容を表示できるコマンドになります。objdumpコマンドは実行ファイルやオブジェクトファイルを調査するのに便利なコマンドです。

objdumpコマンドでアーカイブファイルを指定するとそのアーカイブファイル内のそれぞれのオブジェクトファイルについての情報を表示できます。

スポンサーリンク

アーカイブファイルの内容を表示
(-aオプション)

-aオプションを用いるとアーカイブファイルの内容を'ls -l'のような形式で表示できます。

コマンド例

実行結果

 

 

 

逆アセンブル情報を表示
(-dオプション)

objdumpコマンドで-dオプションを用いるとオブジェクトファイルの逆アセンブル情報を表示できます。

コマンド例

実行結果

 

また、--start-addressオプションや--stop-addressオプションを利用すると表示する開始アドレスや終了アドレスを指定できます。

コマンド例と実行結果

 

 

 

ソースコードを含めて逆アセンブル情報を表示
(-Sオプション)

-Sオプションを用いるとソースコードを含めた逆アセンブル情報を表示できます。

このオプションは、gccコマンドの-gオプション等を用いてデバッグ情報を含めてコンパイルする必要があります。

コマンド例

実行結果

 

 

 

行番号を表示
(-lオプション)

-dまたは-Dまたは-rオプションとともに-lオプションを用いると、デバッグ情報を利用して逆アセンブル情報にファイルの行番号を追加で表示できます。

コマンド例

実行結果

 

 

 

逆アセンブル情報に完全なアドレス情報を表示
(--prefix-addressesオプション)

--prefix-addressesオプションは逆アセンブル情報を表示する場合、アドレス情報が完全なアドレス情報として表示できます。

コマンド例

実行結果

 

 

 

ファイルのオフセット情報を表示
(-Fオプション)

-Fオプションは逆アセンブル情報を表示する場合、ファイルのオフセット情報を表示できます。

コマンド例

実行結果

 

 

 

全てのセクションの逆アセンブル情報を表示
(-Dオプション)

-Dオプションを用いると、オブジェクトファイルのすべてのセクションの逆アセンブル情報を表示できます。

コマンド例

実行結果

 

 

 

セクションを指定
(-jオプション)

-jオプションでセクション名を指定すると、表示する情報をそのセクションのみにできます。

また、セクション名は-hオプションを用いるとまとめられた情報を得ることができます。

コマンド例

実行結果

 

 

 

セクションヘッダー情報を表示
(-hオプション)

-hオプションはセクションヘッダー情報を表示しできます。セクションのまとめを確認する場合に便利です。

コマンド例

実行結果

 

-wオプションは表示幅を1行80文字より多く出力することができます。また、シンボル名なども切り捨てられません。

 

 

 

デバッグ情報を表示
(-gオプション)

-gオプションを用いるとデバッグ情報を表示できます。

コマンド例

実行結果

 

また、gccの-gオプション等を用いて、デバッグ情報があるオブジェクトファイルを作成した場合、そのデバッグ情報のセクションについての情報も表示されるため、より多くの情報が表示されます。

 

 

 

全てのセクションの内容を表示
(-sオプション)

-sオプションを用いると、全てのセクションのバイナリの内容を表示できます。

コマンド例

実行結果

 

 

 

全てのヘッダー情報を表示
(-xオプション)

-xオプションを用いると全てのヘッダー情報(オブジェクトファイルのフォーマット情報、ファイルのヘッダー情報、シンボルテーブル情報、リロケーション情報)を表示できます。

また、-xオプションは-a, -f, -h, -p, -r, -tオプションをすべて利用したオプションになります。

コマンド例

実行結果

 

-wオプションは表示幅を1行80文字より多く出力することができます。また、シンボル名なども切り捨てられません。

 

 

 

オブジェクトファイルのフォーマットを表示
(-pオプション)

-pオプションを用いるとオブジェクトファイルのフォーマットについての情報を表示できます。表示される内容はオブジェクトファイルの種類によって異なります。

コマンド例

実行結果

 

実行ファイルを指定した場合は、以下のようになります。

コマンド例

実行結果

 

 

 

ファイルのヘッダー情報を表示
(-fオプション)

-fオプションを用いるとファイルのヘッダー情報を表示できます。

コマンド例

実行結果

 

 

 

シンボルテーブルを表示
(-tオプション)

-tオプションを用いるとオブジェクトファイルのシンボルテーブルを表示できます。1列目はシンボル値を表しています。2列目の部分は、スペースが多いかもしれないかもしれませんが、7文字の文字列が入り、シンボルの特徴を表しています。3列目はセクションを表します。4列目はアライメントやサイズを表します。最後の列はシンボル名を表します。

シンボルの特徴

n文字目 記号と意味
1 l:ローカル
g:グローバル
u:ユニークグローバル
!:ローカルとグローバルの両方
なし:ローカルでもグローバルでもない
2 w:weak symbol
なし:strong symbol
(参考:Weak symbol - Wikipedia
3 C:コンストラクタ
4 W:warning symbol
5 I:別のシンボルの間接参照
i:リロケーション処理中に評価される関数
6 d:デバッグシンボル
D:ダイナミックシンボル
7 F:関数
f:ファイル
O:オブジェクト

コマンド例

実行結果

 

 

 

リロケーション情報を表示
(-rオプション)

-rオプションを用いるとリロケーション情報が表示されます。

コマンド例

実行結果

 

また、-dオプションや-Dオプションと一緒に用いると逆アセンブル情報に追加でリロケーション情報が表示されます。

コマンド例と実行結果

 

 

 

動的シンボルテーブルを表示
(-Tオプション)

-Tオプションを用いると動的シンボルテーブルを表示できます。この情報は共有ライブラリのような動的オブジェクトを使用するオブジェクトファイルに対して利用できます。

コマンド例

実行結果

 

コマンド例

実行結果

 

 

 

動的リロケーション情報を表示
(-Rオプション)

-Rオプションを用いると動的リロケーション情報を表示できます。この情報は共有ライブラリのような動的オブジェクトを使用するオブジェクトファイルに対して利用できます。

コマンド例

実行結果

 

コマンド例

実行結果

 

 

 

プログラムが必要とする共有ライブラリの表示

objdumpコマンドの-pオプションを用いるとオブジェクトファイルのフォーマットについての情報を表示できます。共有ライブラリを必要とする実行プラグラムに対して、'objdump -p'を行うとNEEDEDの情報でプログラムの実行に必要な共有ライブラリの情報が表示されます。さらにgrepコマンドでNEEDEDをキーワードにすることで、その共有ライブラリの情報をリスト化できます。

また、下のコマンド例と実行結果ではwhichコマンドでプログラムのパスを取得しています。

コマンド例

コマンド例と実行結果

 

 

 

参考

GNU Binary Utilities: objdump