Nm (Unix)

nm
Originalautor (en) Dennis Ritchie,
Ken Thompson
(AT & T Bell Laboratories)
Entwickler (en) Verschiedene Open Source und kommerziell Entwickler
Erstveröffentlichung 3. November 1971; vor 50 Jahren
Geschrieben in C
Betriebssystem Unix, Unix-artig, Plan 9
Plattform Plattformübergreifend
Typ Befehl
Lizenz Plan 9: MIT -Lizenz

nm (Nennen Sie Mangling) ist ein Unix Befehl verwendet, mit dem das abgeladen wurde Symboltabelle und ihre Attribute von a binär ausführbar Datei (einschließlich Bibliotheken, zusammengestellt Objektmodule, Shared-Object-Dateien und Standalone Ausführbare).

Die Ausgabe von nm Unterscheidet zwischen verschiedenen Symboltypen. Zum Beispiel unterscheidet es zwischen a Funktion Dies wird von einem Objektmodul und einer Funktion geliefert, die von ihm erforderlich ist. nm wird als Hilfe für Debuggen, um Probleme zu lösen, die sich aus Namenskonflikten ergeben und C ++ Nennen Sie Mangling und validieren Sie andere Teile der Toolchain.

Dieser Befehl wird mit einer Reihe späterer Versionen von versendet Unix und ähnlich Betriebssysteme einschließlich Plan 9. Das GNU -Projekt versendet eine Implementierung von nm Im Rahmen des Gnu binutils Paket.

NM -Ausgangsprobe

/*  * Dateiname: test.c  * Für C -Code kompilieren mit:   * GCC -c test.c  *  * Für C ++ - Code Compile mit:  * g ++ -c test.cpp  */ int global_var; int global_var_init = 26; statisch int static_var; statisch int static_var_init = 25; statisch int static_function() { 	Rückkehr 0; } int global_function(int p) { 	statisch int local_static_var; 	statisch int local_static_var_init=5; 	local_static_var = p; 	Rückkehr local_static_var_init + local_static_var; } int global_function2() { 	int x; 	int y; 	Rückkehr x+y; } #ifdef __cplusplus extern "C" #endif Leere Non_mangled_function() { 	// Ich tue nichts } int hauptsächlich(Leere) { 	global_var = 1; 	static_var = 2; 	Rückkehr 0; } 

Wenn der vorherige Code mit dem kompiliert wird GCC C Compiler, die Ausgabe der nm Der Befehl ist der folgende:

# nm test.o0000000a 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 

Wenn der C ++ - Compiler verwendet wird, unterscheidet sich der Ausgang:

# nm test.o0000000a 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 

Die Unterschiede zwischen den Ausgängen zeigen auch ein Beispiel für die Lösung des Namens des Namens Mangling durch Verwendung EXTERN "C" In C ++ - Code.

Siehe auch

Externe Links