Loading article…
| 原作者 | デニス・リッチー、 ケン・トンプソン (AT&Tベル研究所) |
|---|---|
| 開発者 | さまざまなオープンソースおよび商用開発者 |
| 初回リリース | 1971年11月3日 |
| 書かれた | C |
| オペレーティング·システム | Unix、Unix ライク、Plan 9 |
| プラットフォーム | クロスプラットフォーム |
| タイプ | 指示 |
| ライセンス | プラン9: MITライセンス |
nmは、バイナリ実行可能ファイル (ライブラリ、コンパイルされたオブジェクト モジュール、共有オブジェクト ファイル、スタンドアロン実行可能ファイルを含む)
からシンボル テーブルとその属性をダンプするために使用されるUnixコマンドです。
からの出力はnm、さまざまなシンボル タイプを区別します。たとえば、オブジェクト モジュールによって提供される関数と、オブジェクト モジュールに必要な関数を区別します。は、デバッグnmの補助として使用され、名前の競合やC++ の名前のマングリングから生じる問題を解決し、ツールチェーンの他の部分を検証するのに役立ちます。
このコマンドは、 Plan 9を含むUnixおよび類似の オペレーティング システムの以降のバージョンに同梱されています。GNUプロジェクトは、の実装をGNU Binutilsパッケージの一部として同梱しています。
nm
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 ) { static int local_static_var ; static 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 non_mangled_function
出力の違いは、 C++ コードでextern "C" を使用して名前マングリングの問題を解決する例も示しています。
参照
外部リンク
- : オブジェクト ファイルの名前リストを書き込む – シェルおよびユーティリティ リファレンス、The Single UNIX 仕様、バージョン 4、The Open Group
- – Plan 9プログラマーズマニュアル、第 1 巻
