objdumpコマンド チートシート

目的別のobjdumpコマンド オプション・使用例集

ファイルヘッダ情報の表示

オブジェクトファイル、実行可能ファイル、共有ライブラリなどの基本的なファイルヘッダ情報を表示します。

オプション 説明 使用例
-f
--file-headers
ファイル全体のヘッダサマリ情報(ファイル形式、アーキテクチャ、開始アドレスなど)を表示します。最も基本的な情報確認に使用します。
objdump -f executable_file
objdump --file-headers library.so object.o
-p
--private-headers
ファイルフォーマット(例: ELF, COFF)固有のヘッダ情報を表示します。プログラムヘッダ(セグメント情報)などが含まれます。実行可能ファイルや共有ライブラリのロード方法を理解するのに役立ちます。
objdump -p my_program
objdump --private-headers /usr/lib/libc.so
-x
--all-headers
利用可能なすべてのヘッダ情報(ファイルヘッダ、セクションヘッダ、シンボルテーブル、再配置エントリなど)を表示します。-a, -f, -h, -p, -r, -t を一度に指定するのとほぼ同等です。包括的な情報を得たい場合に便利です。
objdump -x my_app
objdump --all-headers module.o

セクションヘッダ情報の表示

ファイル内の各セクション(例: .text, .data, .bss)に関する詳細情報を表示します。

オプション 説明 使用例
-h
--section-headers
--headers
主要なセクションヘッダのサマリ情報(セクション名、サイズ、ファイルオフセット、VMA/LMA、フラグなど)を表示します。
objdump -h my_program
objdump --section-headers my_library.a
-j <section>
--section=<section>
指定した名前のセクションに関する情報のみを表示します。他のオプション(-d, -s, -r など)と組み合わせて使用します。特定のセクションに注目したい場合に便利です。
# .text セクションのみ逆アセンブル
objdump -d -j .text my_program
# .data セクションの内容を表示
objdump -s --section=.data my_program
-s
--full-contents
指定されたセクション(デフォルトでは非空の全セクション)の完全な内容を16進数およびASCII形式でダンプします。データセクションの内容確認などに用います。
# 全セクションの内容を表示
objdump -s my_program
# .rodata セクションの内容のみ表示
objdump -s -j .rodata my_program
-g
--debugging
デバッグ情報セクション(.debug_*, .stab* など)の内容を表示します。デバッグ情報のフォーマット(DWARF, STABSなど)を解析して表示します。通常は readelf --debug-dump の方が詳細な情報を提供します。
# デバッグ情報を含む場合
objdump -g my_program_debug

シンボルテーブルの表示

ファイル内で定義または参照されているシンボル(関数名、変数名など)の情報を表示します。

オプション 説明 使用例
-t
--syms
ファイル内のシンボルテーブルエントリを表示します。シンボルのアドレス、スコープ、型、サイズ、名前などが表示されます。
objdump -t my_program
objdump --syms libexample.so
-T
--dynamic-syms
動的シンボルテーブルのエントリを表示します。共有ライブラリや実行可能ファイルが実行時に使用するシンボル(外部ライブラリ関数への参照やエクスポートされるシンボルなど)が対象です。
objdump -T my_program
objdump --dynamic-syms /usr/lib/libm.so
--demangle[=<style>]
-C
C++などでマングル(難号化)されたシンボル名をデマングル(可読化)して表示します。-C はGNUスタイルでのデマングルを意味します。特定のデマングルスタイルを指定することも可能です (例: `arm`, `hp`, `edg`, `gnu-v3`, `java`, `gnat`)。
# デマングルしてシンボル表示
objdump -tC my_cpp_program
# デマングルして逆アセンブル
objdump -dC my_cpp_program
# 特定のスタイルでデマングル
objdump -t --demangle=arm my_cpp_program
--special-syms ターゲット固有の特別な意味を持つシンボルも表示に含めます。通常はデバッグや内部解析にのみ役立ちます。
objdump -t --special-syms my_program
--synthetic リンカによって生成された合成シンボル (Synthetic symbols) も表示します。通常は表示されません。
objdump -t --synthetic my_program

逆アセンブル (Disassemble)

機械語コードを人間が読めるアセンブリ言語に変換して表示します。

オプション 説明 使用例
-d
--disassemble
実行コードを含むセクション(通常は `.text`)を逆アセンブルします。最も基本的な逆アセンブルオプションです。
objdump -d my_program
-D
--disassemble-all
-d と似ていますが、データセクションを含む全てのセクションを逆アセンブルしようと試みます。データ部分を無理やりコードとして解釈するため、意図しない結果になることが多いですが、データに紛れたコードを探す場合などに使われることがあります。
objdump -D my_program
-S
--source
可能であれば、逆アセンブル結果にソースコードをインターリーブして表示します。コンパイル時にデバッグ情報(-g オプションなど)が付加されている必要があります。ソースコードとアセンブリの対応を確認するのに非常に便利です。
# デバッグ情報付きでコンパイル: gcc -g main.c -o main_debug
objdump -dS main_debug
-l
--line-numbers
逆アセンブル結果に、対応するソースコードのファイル名と行番号を含めます(デバッグ情報が必要です)。-S よりも簡潔な表示になります。
objdump -dl main_debug
--start-address=<addr> 指定されたアドレスから逆アセンブルを開始します。
objdump -d --start-address=0x401000 my_program
--stop-address=<addr> 指定されたアドレスで逆アセンブルを停止します。
objdump -d --start-address=0x401000 --stop-address=0x401100 my_program
-M <options>
--disassembler-options=<options>
ターゲットアーキテクチャ固有の逆アセンブラオプションを指定します。利用可能なオプションはアーキテクチャによって異なります(例: x86では `intel`, `att` で構文切り替え、ARMでは `force-thumb` など)。カンマ区切りで複数指定可能です。
# x86 で Intel 構文を使用
objdump -d -M intel my_program
# ARM で Thumb 命令を強制
objdump -d -M force-thumb my_arm_program
# RISC-V で C拡張 (compressed) を無効化
objdump -d -M no-aliases,numeric my_riscv_program
--prefix-addresses 逆アセンブルの各行に完全なアドレスを表示します。通常は関数先頭からのオフセットが表示されることがあります。
objdump -d --prefix-addresses my_program
-z
--disassemble-zeroes
通常はスキップされることが多いゼロで埋められたブロックも逆アセンブルします。
objdump -dz my_program

リンカがシンボルのアドレスを解決するために使用する再配置エントリを表示します。

オプション 説明 使用例
-r
--reloc
ファイルの再配置エントリを表示します。オブジェクトファイル(.o)の解析に特に有用です。どのシンボルがどの場所で参照されているかを示します。
objdump -r my_object.o
-R
--dynamic-reloc
動的再配置エントリを表示します。実行可能ファイルや共有ライブラリがロード時に解決する必要がある再配置情報です(例: GOT/PLT関連)。
objdump -R my_program
objdump --dynamic-reloc /lib/x86_64-linux-gnu/libc.so.6
-j <section> と併用 特定のセクションに関連する再配置情報のみを表示します。
# .text セクションの再配置情報を表示
objdump -r -j .text my_object.o
# .rela.dyn セクションの動的再配置情報を表示
objdump -R -j .rela.dyn my_program

動的情報の表示 (Dynamic Section)

実行可能ファイルや共有ライブラリの動的リンクに必要な情報(依存ライブラリ、動的シンボルテーブル、再配置テーブルの場所など)を表示します。

オプション 説明 使用例
-p
--private-headers
ELFファイルの場合、このオプションで表示されるプログラムヘッダの中に `DYNAMIC` セグメントの情報が含まれており、これが動的セクションの場所を示します。動的セクション自体の詳細な内容は readelf -d の方が見やすいですが、objdumpでも関連情報を確認できます。
objdump -p my_program
-T
--dynamic-syms
動的シンボルテーブルを表示します(再掲)。これは動的セクションで参照される重要な情報です。
objdump -T my_program
-R
--dynamic-reloc
動的再配置エントリを表示します(再掲)。これも動的セクションで参照される情報です。
objdump -R my_program
Note: 動的セクション(`.dynamic`)の内容自体を直接、人間が読みやすい形式で表示する専用オプションは `objdump` には限定的です。より詳細な情報は readelf -d <file> を使用するのが一般的です。

アーカイブファイルの操作

静的ライブラリ(アーカイブファイル、`.a`)内のオブジェクトファイルに対して操作を行います。

オプション 説明 使用例
-a
--archive-headers
アーカイブファイルのヘッダ情報(含まれるオブジェクトファイル名、タイムスタンプ、UID/GID、モード、サイズなど)を表示します。`ar t` や `ar tv` に似た機能です。
objdump -a libmylib.a
アーカイブ内の特定ファイルに対する操作 アーカイブファイル名に続けて、内部のオブジェクトファイル名を指定することで、そのオブジェクトファイルに対して他の `objdump` オプション(-d, -t, -h など)を適用できます。
# libmylib.a 内の module1.o を逆アセンブル
objdump -d libmylib.a module1.o
# libmylib.a 内の module2.o のシンボルテーブルを表示
objdump -t libmylib.a module2.o
アーカイブ内の全ファイルに対する操作 アーカイブファイル名のみを指定し、他のオプション(-d, -t など)を付けると、アーカイブ内の全てのオブジェクトファイルに対してその操作が実行されます。
# libmylib.a 内の全てのオブジェクトファイルを逆アセンブル
objdump -d libmylib.a

特定のアーキテクチャ/フォーマット指定

ファイルのアーキテクチャやフォーマットを明示的に指定します。通常は自動判別されますが、クロスコンパイル環境や特殊なファイルで役立ちます。

オプション 説明 使用例
-m <machine>
--architecture=<machine>
ターゲットアーキテクチャを指定します。objdump --help でサポートされているアーキテクチャ名を確認できます(例: `i386`, `i386:x86-64`, `arm`, `aarch64`, `riscv:rv64`, `mips` など)。ヘッダ情報がないRAWバイナリなどを逆アセンブルする際に必要となることがあります。
# x86-64 として逆アセンブル
objdump -d -m i386:x86-64 my_binary
# ARM アーキテクチャを指定
objdump -d -m arm my_arm_binary
-b <bfdname>
--target=<bfdname>
オブジェクトファイルのフォーマット(BFD名)を指定します。objdump -i または objdump --info でサポートされているフォーマット名を確認できます(例: `elf64-x86-64`, `elf32-littlearm`, `pei-i386`, `binary` など)。RAWバイナリを扱う際によく使われます。
# RAW バイナリを x86-64 コードとして逆アセンブル
objdump -d -b binary -m i386:x86-64 raw_code.bin
# PE フォーマット (Windows) として解析
objdump -x -b pei-i386 my_windows_app.exe
-i
--info
-b-m で指定可能なターゲットとアーキテクチャの一覧を表示します。
objdump -i
objdump --info
--endian=<endian> エンディアン(バイトオーダー)を指定します。big または little を指定します。-b binary などと組み合わせて、RAWデータの解析に使用します。
# RAW バイナリをビッグエンディアン MIPS として逆アセンブル
objdump -d -b binary -m mips --endian=big mips_code.bin

出力制御オプション

objdumpの出力形式や内容を調整します。

オプション 説明 使用例
-w
--wide
一部の行が端末幅を超える場合でも、折り返さずに表示します。長いシンボル名や命令を表示する際に便利です。パイプやリダイレクトと組み合わせて使うことが多いです。
objdump -dwC my_cpp_program | less
--adjust-vma=<offset> 表示されるすべてのアドレス(VMA: Virtual Memory Address)に指定したオフセットを加算します。ロードアドレスが不明なRAWバイナリなどを解析する際に、特定のアドレス空間にマッピングされていると仮定して表示するのに役立ちます。
# アドレスを 0x10000 だけずらして表示
objdump -d --adjust-vma=0x10000 my_program
--show-raw-insn 逆アセンブル時に、アセンブリ命令に加えて、その命令に対応する生のバイト列(16進数)を表示します。
objdump -d --show-raw-insn my_program
--no-show-raw-insn --show-raw-insn がデフォルトで有効な場合に、生のバイト列の表示を抑制します(通常は不要)。
objdump -d --no-show-raw-insn my_program
--insn-width=<width> 逆アセンブル時に、命令のバイト列を表示するために確保する幅(バイト数)を指定します。アーキテクチャによっては可変長の命令があるため、適切な幅を指定することで表示が整います。
# 命令バイト表示幅を 8 バイトに設定
objdump -d --show-raw-insn --insn-width=8 my_program
-V
--version
objdump のバージョン情報を表示します。
objdump -V
-H
--help
利用可能なオプションの一覧と簡単な説明を表示します。
objdump --help

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です