[Linux]nmコマンドについて

manpage
新:https://linuxjm.osdn.jp/html/GNU_binutils/man1/nm.1.html
旧:http://www.linux.or.jp/JM/html/GNU_binutils/man1/nm.1.html

nm – オブジェクトファイルのシンボルをリストする

T: テキスト領域(テキストっていうのはコード(プログラム)のことです)
U: 未解決シンボル
B: 初期化されていないデータ領域

(BSS: 確か、ロード後に必要となるサイズだけが示されてるんじゃなかったっけ?)

D: データ領域

大文字の場合はグローバルで、小文字だとそうではないということです。Cレベル だとファイルスコープでのexternとstaticということになるでしょうか。

$ info nm

で見れる。


目的のライブラリ関数が、どのライブラリに入っているかは nm コマンドで探すとよい。例えば sin 関数がどのライブラリに入っているかわからないときは

% nm -o /usr/lib/*.a /usr/X11R6/lib/*.a | grep sin

とすればよい。参照のみのシンボル (実体がない) は

U _sin

と表示されるので、

% nm -o /usr/lib/*.a /usr/X11R6/lib/*.a | grep sin | grep -v ' U '

とすると、参照のみのシンボルを除外できる。

nm -D /usr/lib/libc.so

コメント

タイトルとURLをコピーしました