nm - オブジェクトファイルのシンボル情報を表示する

nm

nmコマンドはオブジェクトファイルや実行ファイルを指定することでそのオブジェクトファイルのシンボル情報を確認できます。シンボル情報は、コンパイラがソースコードにある変数名などの情報をオブジェクトファイルに変換するときに、どのように変換されたかの情報を確認できるため、デバッグ情報として利用できるかもしれません。

スポンサーリンク

シンボル情報のタイプの文字対応表

nmコマンドでは

のような形式でシンボル情報が表示されます。
一番左がシンボル値(デフォルト:16進数)、真ん中がシンボルのタイプ、一番右がシンボル名になります。

シンボルのタイプは例えば、以下のような種類があります。また、シンボルのタイプは基本的に大文字がグローバルで、小文字がローカルとなります。

シンボルのタイプ

文字意味
Aシンボル値が絶対値
B (b)初期化されていないデータセクション(BSS)
Cコモンシンボル
D (d)初期化されているデータセクション
I他のシンボルの間接参照
Nデバッグシンボル
R (r)read onlyデータセクション
T (t)テキストセクション
U未定義シンボル
V (v)weak symbol
W (w)weak symbol (タグ付けされていない)
?シンボルタイプが不明

シンボル情報を表示

nmコマンドはオブジェクトファイルを指定するとシンボル情報を表示できます。
nmコマンドで引数を指定しない場合、a.outのファイルが指定されます。

コマンド例

実行結果

ファイル名も表示
(-Aオプションまたは-oオプション)

-Aオプションまたは-oオプションを用いるとシンボル情報にファイル名の情報が表示されます。

コマンド例

実行結果

スポンサーリンク

デバッグ用のシンボルを含めすべてのシンボルを表示
(-aオプション)

-aオプションを用いると通常では表示されないシンボルがすべて表示されます。

コマンド例

実行結果

動的シンボルの情報を表示
(-Dオプション)

-Dオプションを用いると動的シンボルの情報を表示します。動的シンボルの情報は共有ライブラリ等を使用しているオブジェクトファイルで確認できます。

コマンド例

実行結果

出力フォーマットを指定
(-fオプション)

-fオプションを用いると出力フォーマットを変更できます。出力フォーマットは'bsd', 'sysv', 'posix'になります。デフォルトの出力フォーマットは'bsd'になります。

コマンド例

実行結果

コマンド例

実行結果

-Pオプションは-f posixと同じになります。

externalシンボルのみを表示
(-gオプション)

-gオプション用いると外部に公開されているシンボルのみが表示されます。例えば、C言語のstatic修飾子を用いるとシンボルのスコープがそのファイルのみになります。ここでnmコマンドの-gオプションを用いて、シンボル情報を確認するとstatic修飾子を用いたシンボルが表示されません。

prog2.c

nmコマンドの実行結果(-gオプションなし)

コマンド例

実行結果

未定義シンボルのみを表示
(--undefined-onlyオプション)

--undefined-onlyオプションを用いると未定義シンボルのみを表示します。

コマンド例

実行結果

定義済みシンボルのみを表示
(--defined-onlyオプション)

--defined-onlyオプションを用いると定義済みシンボルのみが表示されます。

コマンド例

実行結果

デバッグ情報を利用してシンボルに行番号を追加
(-lオプション)

-lオプションを用いるとオブジェクトファイルにあるデバッグ情報を利用して行番号を追加して表示します。デバッグ情報は例えば、gccの-gオプションを用いると作成されるオブジェクトファイルにデバッグ情報が追加されます。

コマンド例

実行結果

シンボル値でソート
(-nオプションまたは-vオプション)

-nオプションまたは-vオプションを用いるとシンボル値でソートされます。

コマンド例

実行結果

シンボルのサイズを表示
(-Sオプション)

-Sオプションを用いるとシンボル値の後にシンボルのサイズが表示されます。また、--size-sortオプションを用いるとそのサイズでソートを行うことができます。

コマンド例

実行結果

逆順でソート
(-rオプション)

-rオプションを用いると逆順でソートを行うことができます。例えば、-nオプションと一緒に用いるとシンボル値で逆順のソートを行うことができます。

コマンド例

実行結果

また、-nオプション等のオプションがない場合、シンボル名をアルファベット順の逆順でソートします。

コマンド例

実行結果

アーカイブファイルのインデックスを含むシンボル情報を表示
(-sオプション)

-sオプションを用いるとシンボル情報のほかにアーカイブファイルのインデックス情報が表示されます。

コマンド例

実行結果

シンボル値の基数を指定
(-tオプション)

-tオプションを用いるとシンボル値の基数を変更できます。シンボル値の基数のデフォルトは16進数になります。-tオプションで指定できるのは、d (10進数), o (8進数), x (16進数)になります。

コマンド例

実行結果

参考

GNU Binary Utilities: nm

スポンサーリンク