Wikipedia

nm (Unix)

nm
Original author(s)Dennis Ritchie,
Ken Thompson
(AT&T Bell Laboratories)
Developer(s)Various open-source and commercial developers
Initial releaseNovember 3, 1971
Operating systemUnix, Unix-like, Plan 9
PlatformCross-platform
TypeCommand

The nm command ships with a number of later versions of Unix and similar operating systems including Plan 9. nm is used to examine binary files (including libraries, compiled object modules, shared-object files, and standalone executables) and to display the contents of those files, or meta information stored in them, specifically the symbol table. The output from nm distinguishes between various symbol types. For example, it differentiates between a function that is supplied by an object module and a function that is required by it. nm is used as an aid for debugging, to help resolve problems arising from name conflicts and C++ name mangling, and to validate other parts of the toolchain.

The GNU Project ships an implementation of nm as part of the GNU Binutils package.

nm output sample

/*  * File name: test.c  * For C code compile with:   * gcc -c test.c  *  * For C++ code compile with:  * g++ -c test.cpp  */ int global_var; int global_var_init = 26; static int static_var; static int static_var_init = 25; static int static_function { return 0; } int global_function(int p) { static int local_static_var; static int local_static_var_init=5; local_static_var = p; return 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 { // I do nothing } int main(void) { global_var = 1; static_var = 2; return 0; } 

If the previous code is compiled with the gcc C compiler, the output of the nm command is the following:

# 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 

When the C++ compiler is used, the output differs:

# 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 

The differences between the outputs also show an example of solving the name mangling problem by using extern "C" in C++ code.

See also

External links

This article is copied from an article on Wikipedia® - the free encyclopedia created and edited by its online user community. The text was not checked or edited by anyone on our staff. Although the vast majority of Wikipedia® encyclopedia articles provide accurate and timely information, please do not assume the accuracy of any particular article. This article is distributed under the terms of GNU Free Documentation License.

Copyright © 2003-2025 Farlex, Inc Disclaimer
All content on this website, including dictionary, thesaurus, literature, geography, and other reference data is for informational purposes only. This information should not be considered complete, up to date, and is not intended to be used in place of a visit, consultation, or advice of a legal, medical, or any other professional.