nm (Unix)

ナノメートル
原作者デニス・リッチー
ケン・トンプソン
AT&Tベル研究所
開発者さまざまなオープンソースおよび商用開発者
初回リリース1971年11月3日; 54年前 (1971-11-03)
書かれたC
オペレーティング·システムUnixUnixライクPlan 9
プラットフォームクロスプラットフォーム
タイプ指示
ライセンスプラン9: MITライセンス

nmは、バイナリ実行可能ファイル (ライブラリ、コンパイルされたオブジェクト モジュール、共有オブジェクト ファイル、スタンドアロン実行可能ファイルを含む) からシンボル テーブルとその属性をダンプするために使用されるUnixコマンドです。

の出力は、nm様々なシンボルタイプを区別します。例えば、オブジェクトモジュールによって提供される関数と、そのオブジェクトモジュールによって必要とされる関数を区別します。は、デバッグnmの補助として、名前の競合やC++の名前マングリングによって生じる問題の解決、およびツールチェーンの他の部分の検証に使用されます

このコマンドは、 Plan 9を含むUnixおよび類似の オペレーティングシステムの多くの後継バージョンに同梱されています。GNUプロジェクトは、GNU Binutilsパッケージの一部としての実装を提供していますnm

語源は、古いバージョン7 Unixnmのマニュアルページで、シンボルテーブルの代わりに名前リストという用語が使用されていたことに由来します。[1]

nm出力サンプル

/* * ファイル名: test.c * C コードのコンパイルには、次のようにします: * gcc -c test.c * * C++ コードのコンパイルには、次のようにします: * g++ -c test.cpp */intグローバル変数; int global_var_init = 26 ;    静的int static_var ;静的int static_var_init = 25 ;      静的int static_function () { 0を返す; }   int global_function ( int p ) {静的int local_static_var ;静的int local_static_var_init = 5 ;      ローカル静的変数= p ;  local_static_var_init + local_static_varを返します}   int global_function2 () { int x ; int y ; return x + y ; }    #ifdef __cplusplus extern "C" #endif void non_mangled_function () { // 何もしない}  int main ( void ) { global_var = 1 ; static_var = 2 ;     0を返す; } 

前のコードをgcc C コンパイラでコンパイルすると、コマンドの出力はnm次のようになります。

# nm  test.o 0000000a T global_function 00000025 T global_function2 00000004 C global_var 00000000 D global_var_init 00000004 b local_static_var.1255 00000008 d local_static_var_init.1256 0000003b T main 00000036 T non_mangled_function 00000000 t static_function 00000000 b static_var 00000004 d static_var_init

C++ コンパイラを使用すると、出力は異なります。

# nm  test.o 0000000a T _Z15global_functioni 00000025 T _Z16global_function2v 00000004 b _ZL10static_var 00000000 t _ZL15static_functionv 00000004 d _ZL15static_var_init 00000008 b _ZZ15global_functioniE16local_static_var 00000008 d _ZZ15global_functioniE21local_static_var_init  U __gxx_personality_v0 00000000 B global_var 00000000 D global_var_init 0000003b T main 00000036 T 非マングル関数

出力の違いは、C++ コードでextern "C"を使用して名前マングリングの問題を解決する例も示しています。

シンボルの種類
シンボルの種類説明
グローバル絶対記号
1つのローカル絶対記号
Bグローバルbssシンボル
bローカルbssシンボル
Dグローバルデータシンボル
dローカルデータシンボル
fソースファイル名のシンボル
Rグローバル読み取り専用シンボル
rローカル読み取り専用シンボル
Tグローバルテキストシンボル
tローカルテキストシンボル
あなた未定義のシンボル

参照

参考文献

  1. ^ "NM(1)". Unix第7版一般コマンドマニュアル. 2025年3月14日閲覧。
  • nm: オブジェクトファイルの名前リストを書き込む – シェルおよびユーティリティリファレンス、The Single UNIX 仕様、バージョン5、The Open Group
  • nm(1) –  Plan 9プログラマーズマニュアル 第1巻
Retrieved from "https://en.wikipedia.org/w/index.php?title=Nm_(Unix)&oldid=1280534727"