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.