my-server
← Wiki

Nm (Unix)

<code>nm</code> is a Unix command used to dump the symbol table and their attributes from a binary executable file (including libraries, compiled object modules, shared-object files, and standalone executables).

The output from <code>nm</code> 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. <code>nm</code> 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.

This command is shipped with a number of later versions of Unix and similar operating systems including Plan 9. The GNU Project ships an implementation of <code>nm</code> as part of the GNU Binutils package.

The etymology is that in the old Version 7 Unix, <code>nm</code>'s manpage used the term name list instead of symbol table.

nm output sample

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

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

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

See also

References

External links