Notes sobre l'ús i el significat de les ordres de Linux nm

Linux Nm Command Usage



Moltes vegades no prestem atenció a la implementació de la pròpia biblioteca o no podem veure la lògica subjacent, però hem de confirmar el nom d'algunes funcions o variables (com ara la resolució de problemes). Aquesta vegada hem d'utilitzar una eina 'nm' molt bàsica però molt útil.


Introducció d'ordres d'1 nm

NAME nm - list symbols from object files SYNOPSIS nm [-A|-o|--print-file-name] [-a|--debug-syms] [-B|--format=bsd] [-C|--demangle[=style]] [-D|--dynamic] [-fformat|--format=format] [-g|--extern-only] [-h|--help] [-l|--line-numbers] [-n|-v|--numeric-sort] [-P|--portability] [-p|--no-sort] [-r|--reverse-sort] [-S|--print-size] [-s|--print-armap] [-t radix|--radix=radix] [-u|--undefined-only] [-V|--version] [-X 32_64] [--defined-only] [--no-demangle] [--plugin name] [--size-sort] [--special-syms] [--synthetic] [--target=bfdname] [objfile...] DESCRIPTION GNU nm lists the symbols from object files objfile.... If no object files are listed as arguments, nm assumes the file a.out. For each symbol, nm shows: # ... run man nm for detials.

Per simplificar-ho, podeu ajudar-vos a enumerar els símbols que compleixen els requisits definits a l'objectiu. Els requisits poden ser molts, principalment mitjançant paràmetres: introduïts externament, definits internament, dinàmics ... També podeu afegir paràmetres per fer que nm imprimeixi al mateix temps el número de línia, el nom del fitxer i altra informació relacionada.



Significat del resultat a 2 nm

Els valors de símbols que trobarà nm es representen per defecte hexadecimal i els seus tipus s’afegeixen abans de la funció. Els tipus són:



Valor Descripció Nota
A El valor del símbol és absolut i no es canviarà si s’enllaça més. Símbol absolut, el procés d'enllaç no canvia
B / b El símbol es troba a la secció de dades no inicialitzades (coneguda com BSS). Símbol no inicialitzat
C El símbol és comú. Símbol públic, que es cobreix amb el mateix nom quan s’enllaça
D / d El símbol es troba a la secció de dades inicialitzades. Símbol d’inicialització
Bona partida El símbol es troba en una secció de dades inicialitzada per a objectes petits. Símbol d'inicialització per a l'optimització de l'accés a dades petites
Jo El símbol és una referència indirecta a un altre símbol. Referència indirecta a altres símbols
N El símbol és un símbol de depuració. Símbol de depuració
Pàg Els símbols es troben en una secció de desenrotllament de la pila. Símbol de la zona de pila (buit)
R / r El símbol es troba en una secció de dades de només lectura. Símbol només de lectura
S / s El símbol es troba en una secció de dades no inicialitzada per a objectes petits. Símbols no inicialitzats per a l'optimització de l'accés a dades petites
T / t El símbol es troba a la secció de text (codi). Símbol de l'àrea de codi
U El símbol no està definit. Símbols no definits o definits externament
tu El símbol és un símbol global únic. Globalment, reserva GNU única
V / v El símbol és un objecte feble. Delimitador feble (vegeu C ++ Definició de símbol fort i feble)
W / w El símbol és un símbol feble que no s'ha etiquetat específicament com a símbol d'objecte feble. Emm ... símbol de contrasenya de la torre
- El símbol és un símbol de punyalades en un fitxer d'objectes a.out. Símbol de format de punyalades
? Es desconeix el tipus de símbol o el format del fitxer objecte és específic. NM no reconeix símbols

Simplement doneu una castanya:



root@xxxxx:/usr/lib64$ nm libpthread.a nptl-init.o: U __default_pthread_attr U __default_pthread_attr_lock U _dl_cpuclock_offset U _dl_get_tls_static_info U _dl_init_static_tls U _dl_pagesize U _dl_wait_lookup_done U __fork_generation U __getrlimit U __is_smp U __libc_fatal 0000000000000008 C __libc_multiple_threads_ptr U __libc_pthread_init U __libc_setup_tls U __libc_sigaction U __libc_stack_end U __lll_lock_wait_private U __lll_unlock_wake_private 0000000000000000 b __nptl_initial_report_events 00000000000001b0 T __nptl_set_robust U __nptl_setxid_error 0000000000000000 r nptl_version 00000000000004b0 T __pthread_get_minstack 00000000000001d0 T __pthread_initialize_minimal 00000000000001d0 T __pthread_initialize_minimal_internal

Amb els resultats de l'anàlisi de nm i l'explicació de la definició del símbol, podeu trobar el símbol desitjat molt content.