El nm
comando se envía con varias versiones posteriores de Unix y sistemas operativos similares , incluido el Plan 9 . nm
se utiliza para examinar archivos binarios (incluidas bibliotecas , módulos de objetos compilados , archivos de objetos compartidos y ejecutables independientes ) y para mostrar el contenido de esos archivos, o la metainformación almacenada en ellos, específicamente la tabla de símbolos . La salida de nm
distingue entre varios tipos de símbolos. Por ejemplo, diferencia entre una función proporcionada por un módulo de objeto y una función que requiere.nm
se utiliza como ayuda para la depuración , para ayudar a resolver problemas que surgen de conflictos de nombres y alteración de nombres en C ++ , y para validar otras partes de la cadena de herramientas .
Autor (es) original (es) | Dennis Ritchie , Ken Thompson ( Laboratorios Bell de AT&T ) |
---|---|
Desarrollador (es) | Varios desarrolladores comerciales y de código abierto |
Versión inicial | 3 de noviembre de 1971 |
Sistema operativo | Unix , similar a Unix , Plan 9 |
Plataforma | Multiplataforma |
Tipo | Mando |
El Proyecto GNU incluye una implementación de nm
como parte del paquete GNU Binutils .
muestra de salida nm
/ * * Nombre de archivo: test.c * Para código C compilar con: * gcc -c test.c * * Para código C ++ compilar con: * 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 () { retorno 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 función_global2 () { int x ; int y ; return x + y ; }#ifdef __cplusplus extern "C" #endif void non_mangled_function () { // No hago nada }int main ( vacío ) { global_var = 1 ; static_var = 2 ;return 0 ; }
Si el código anterior se compila con el compilador gcc C, el resultado del nm
comando es el siguiente:
# Nm test.o 0000000a T global_function 00000025 T global_function2 00000004 C global_var 00.000.000 D global_var_init 00000004 b local_static_var.1255 00000008 d local_static_var_init.1256 0000003b T principal 00000036 T non_mangled_function 00000000 t static_function 00000000 b static_var 00000004 d static_var_init
Cuando se usa 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 00.000.000 D global_var_init 0000003b T principal 00000036 T non_mangled_function
Las diferencias entre las salidas también muestran un ejemplo de cómo resolver el problema de alteración de nombres usando extern "C" en código C ++.
Ver también
enlaces externos
- Especificación única de UNIX , Edición 7 de The Open Group : escriba la lista de nombres de un archivo de objeto - Referencia de comandos y utilidades,
- Plan 9 , Volumen 1 - Manual del programador de