nmes un comando de Unix que se utiliza para volcar la tabla de símbolos y sus atributos de un archivo ejecutable binario (incluidas bibliotecas , módulos de objetos compilados , archivos de objetos compartidos y ejecutables independientes ).
La salida nmdistingue entre varios tipos de símbolos. Por ejemplo, diferencia entre una función proporcionada por un módulo objeto y una función requerida por este. nmSe utiliza como ayuda para la depuración , para ayudar a resolver problemas derivados de conflictos de nombres y manipulación de nombres de C++ , y para validar otras partes de la cadena de herramientas .
Este comando viene incluido en varias versiones posteriores de Unix y sistemas operativos similares , incluido Plan 9. El Proyecto GNU incluye una implementación como parte del paquete GNU Binutils .nm
La etimología es que en la antigua versión 7 de Unix, nmla página de manual de utilizaba el término lista de nombres en lugar de tabla de símbolos . [ 1 ]
muestra de salida de nm
/* * Nombre del archivo: test.c * Para código C, compile con: * gcc -c test.c * * Para código C++, compile con: * g++ -c test.cpp */int var_global ; 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 () { // No hago nada }int main ( void ) { global_var = 1 ; static_var = 2 ;devolver 0 ; }Si el código anterior se compila con el compilador C gcc , la salida del nmcomando es la siguiente:
# 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_initCuando se utiliza el compilador de C++, la salida es diferente:
# 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_functionLas diferencias entre los resultados también muestran un ejemplo de cómo resolver el problema de la modificación de nombres mediante el uso de extern "C" en código C++.
Véase también
Referencias
- ↑ "NM(1)" . Manual de comandos generales de la séptima edición de Unix . Archivado del original el 5 de enero de 2026. Consultado el 14 de marzo de 2025 .
Enlaces externos
- : escribir la lista de nombres de un archivo objeto – Referencia de Shell y Utilidades, Especificación UNIX Única , Versión 5 de The Open Group
- – Manual del programador de Plan 9 , Volumen 1
- Herramientas de programación Unix
- Utilidades Unix SUS2008
- Órdenes del Plan 9
- Stubs de Unix