目的別のobjdumpコマンド オプション・使用例集
ファイルヘッダ情報の表示
オブジェクトファイル、実行可能ファイル、共有ライブラリなどの基本的なファイルヘッダ情報を表示します。
オプション | 説明 | 使用例 |
---|---|---|
-f --file-headers |
ファイル全体のヘッダサマリ情報(ファイル形式、アーキテクチャ、開始アドレスなど)を表示します。最も基本的な情報確認に使用します。 |
|
-p --private-headers |
ファイルフォーマット(例: ELF, COFF)固有のヘッダ情報を表示します。プログラムヘッダ(セグメント情報)などが含まれます。実行可能ファイルや共有ライブラリのロード方法を理解するのに役立ちます。 |
|
-x --all-headers |
利用可能なすべてのヘッダ情報(ファイルヘッダ、セクションヘッダ、シンボルテーブル、再配置エントリなど)を表示します。-a , -f , -h , -p , -r , -t を一度に指定するのとほぼ同等です。包括的な情報を得たい場合に便利です。 |
|
セクションヘッダ情報の表示
ファイル内の各セクション(例: .text, .data, .bss)に関する詳細情報を表示します。
オプション | 説明 | 使用例 |
---|---|---|
-h --section-headers --headers |
主要なセクションヘッダのサマリ情報(セクション名、サイズ、ファイルオフセット、VMA/LMA、フラグなど)を表示します。 |
|
-j <section> --section=<section> |
指定した名前のセクションに関する情報のみを表示します。他のオプション(-d , -s , -r など)と組み合わせて使用します。特定のセクションに注目したい場合に便利です。 |
|
-s --full-contents |
指定されたセクション(デフォルトでは非空の全セクション)の完全な内容を16進数およびASCII形式でダンプします。データセクションの内容確認などに用います。 |
|
-g --debugging |
デバッグ情報セクション(.debug_*, .stab* など)の内容を表示します。デバッグ情報のフォーマット(DWARF, STABSなど)を解析して表示します。通常は readelf --debug-dump の方が詳細な情報を提供します。 |
|
シンボルテーブルの表示
ファイル内で定義または参照されているシンボル(関数名、変数名など)の情報を表示します。
オプション | 説明 | 使用例 |
---|---|---|
-t --syms |
ファイル内のシンボルテーブルエントリを表示します。シンボルのアドレス、スコープ、型、サイズ、名前などが表示されます。 |
|
-T --dynamic-syms |
動的シンボルテーブルのエントリを表示します。共有ライブラリや実行可能ファイルが実行時に使用するシンボル(外部ライブラリ関数への参照やエクスポートされるシンボルなど)が対象です。 |
|
--demangle[=<style>] -C |
C++などでマングル(難号化)されたシンボル名をデマングル(可読化)して表示します。-C はGNUスタイルでのデマングルを意味します。特定のデマングルスタイルを指定することも可能です (例: `arm`, `hp`, `edg`, `gnu-v3`, `java`, `gnat`)。 |
|
--special-syms |
ターゲット固有の特別な意味を持つシンボルも表示に含めます。通常はデバッグや内部解析にのみ役立ちます。 |
|
--synthetic |
リンカによって生成された合成シンボル (Synthetic symbols) も表示します。通常は表示されません。 |
|
逆アセンブル (Disassemble)
機械語コードを人間が読めるアセンブリ言語に変換して表示します。
オプション | 説明 | 使用例 |
---|---|---|
-d --disassemble |
実行コードを含むセクション(通常は `.text`)を逆アセンブルします。最も基本的な逆アセンブルオプションです。 |
|
-D --disassemble-all |
-d と似ていますが、データセクションを含む全てのセクションを逆アセンブルしようと試みます。データ部分を無理やりコードとして解釈するため、意図しない結果になることが多いですが、データに紛れたコードを探す場合などに使われることがあります。 |
|
-S --source |
可能であれば、逆アセンブル結果にソースコードをインターリーブして表示します。コンパイル時にデバッグ情報(-g オプションなど)が付加されている必要があります。ソースコードとアセンブリの対応を確認するのに非常に便利です。 |
|
-l --line-numbers |
逆アセンブル結果に、対応するソースコードのファイル名と行番号を含めます(デバッグ情報が必要です)。-S よりも簡潔な表示になります。 |
|
--start-address=<addr> |
指定されたアドレスから逆アセンブルを開始します。 |
|
--stop-address=<addr> |
指定されたアドレスで逆アセンブルを停止します。 |
|
-M <options> --disassembler-options=<options> |
ターゲットアーキテクチャ固有の逆アセンブラオプションを指定します。利用可能なオプションはアーキテクチャによって異なります(例: x86では `intel`, `att` で構文切り替え、ARMでは `force-thumb` など)。カンマ区切りで複数指定可能です。 |
|
--prefix-addresses |
逆アセンブルの各行に完全なアドレスを表示します。通常は関数先頭からのオフセットが表示されることがあります。 |
|
-z --disassemble-zeroes |
通常はスキップされることが多いゼロで埋められたブロックも逆アセンブルします。 |
|
再配置情報の表示
リンカがシンボルのアドレスを解決するために使用する再配置エントリを表示します。
オプション | 説明 | 使用例 |
---|---|---|
-r --reloc |
ファイルの再配置エントリを表示します。オブジェクトファイル(.o)の解析に特に有用です。どのシンボルがどの場所で参照されているかを示します。 |
|
-R --dynamic-reloc |
動的再配置エントリを表示します。実行可能ファイルや共有ライブラリがロード時に解決する必要がある再配置情報です(例: GOT/PLT関連)。 |
|
-j <section> と併用 |
特定のセクションに関連する再配置情報のみを表示します。 |
|
動的情報の表示 (Dynamic Section)
実行可能ファイルや共有ライブラリの動的リンクに必要な情報(依存ライブラリ、動的シンボルテーブル、再配置テーブルの場所など)を表示します。
オプション | 説明 | 使用例 |
---|---|---|
-p --private-headers |
ELFファイルの場合、このオプションで表示されるプログラムヘッダの中に `DYNAMIC` セグメントの情報が含まれており、これが動的セクションの場所を示します。動的セクション自体の詳細な内容は readelf -d の方が見やすいですが、objdumpでも関連情報を確認できます。 |
|
-T --dynamic-syms |
動的シンボルテーブルを表示します(再掲)。これは動的セクションで参照される重要な情報です。 |
|
-R --dynamic-reloc |
動的再配置エントリを表示します(再掲)。これも動的セクションで参照される情報です。 |
|
Note: | 動的セクション(`.dynamic`)の内容自体を直接、人間が読みやすい形式で表示する専用オプションは `objdump` には限定的です。より詳細な情報は readelf -d <file> を使用するのが一般的です。 |
アーカイブファイルの操作
静的ライブラリ(アーカイブファイル、`.a`)内のオブジェクトファイルに対して操作を行います。
オプション | 説明 | 使用例 |
---|---|---|
-a --archive-headers |
アーカイブファイルのヘッダ情報(含まれるオブジェクトファイル名、タイムスタンプ、UID/GID、モード、サイズなど)を表示します。`ar t` や `ar tv` に似た機能です。 |
|
アーカイブ内の特定ファイルに対する操作 | アーカイブファイル名に続けて、内部のオブジェクトファイル名を指定することで、そのオブジェクトファイルに対して他の `objdump` オプション(-d , -t , -h など)を適用できます。 |
|
アーカイブ内の全ファイルに対する操作 | アーカイブファイル名のみを指定し、他のオプション(-d , -t など)を付けると、アーカイブ内の全てのオブジェクトファイルに対してその操作が実行されます。 |
|
特定のアーキテクチャ/フォーマット指定
ファイルのアーキテクチャやフォーマットを明示的に指定します。通常は自動判別されますが、クロスコンパイル環境や特殊なファイルで役立ちます。
オプション | 説明 | 使用例 |
---|---|---|
-m <machine> --architecture=<machine> |
ターゲットアーキテクチャを指定します。objdump --help でサポートされているアーキテクチャ名を確認できます(例: `i386`, `i386:x86-64`, `arm`, `aarch64`, `riscv:rv64`, `mips` など)。ヘッダ情報がないRAWバイナリなどを逆アセンブルする際に必要となることがあります。 |
|
-b <bfdname> --target=<bfdname> |
オブジェクトファイルのフォーマット(BFD名)を指定します。objdump -i または objdump --info でサポートされているフォーマット名を確認できます(例: `elf64-x86-64`, `elf32-littlearm`, `pei-i386`, `binary` など)。RAWバイナリを扱う際によく使われます。 |
|
-i --info |
-b や -m で指定可能なターゲットとアーキテクチャの一覧を表示します。 |
|
--endian=<endian> |
エンディアン(バイトオーダー)を指定します。big または little を指定します。-b binary などと組み合わせて、RAWデータの解析に使用します。 |
|
出力制御オプション
objdumpの出力形式や内容を調整します。
オプション | 説明 | 使用例 |
---|---|---|
-w --wide |
一部の行が端末幅を超える場合でも、折り返さずに表示します。長いシンボル名や命令を表示する際に便利です。パイプやリダイレクトと組み合わせて使うことが多いです。 |
|
--adjust-vma=<offset> |
表示されるすべてのアドレス(VMA: Virtual Memory Address)に指定したオフセットを加算します。ロードアドレスが不明なRAWバイナリなどを解析する際に、特定のアドレス空間にマッピングされていると仮定して表示するのに役立ちます。 |
|
--show-raw-insn |
逆アセンブル時に、アセンブリ命令に加えて、その命令に対応する生のバイト列(16進数)を表示します。 |
|
--no-show-raw-insn |
--show-raw-insn がデフォルトで有効な場合に、生のバイト列の表示を抑制します(通常は不要)。 |
|
--insn-width=<width> |
逆アセンブル時に、命令のバイト列を表示するために確保する幅(バイト数)を指定します。アーキテクチャによっては可変長の命令があるため、適切な幅を指定することで表示が整います。 |
|
-V --version |
objdump のバージョン情報を表示します。 |
|
-H --help |
利用可能なオプションの一覧と簡単な説明を表示します。 |
|