Scroll to navigation

NM(1) Instrumente pentru dezvoltare(programare) GNU NM(1)

NUME

nm - listează simbolurile din fișierele obiect

REZUMAT

nm [-A|-o|--print-file-name]
[-a|--debug-syms]
[-B|--format=bsd]
[-C|--demangle[=stil]]
[-D|--dynamic]
[-fformat|--format=format]
[-g|--extern-only]
[-h|--help]
[--ifunc-chars=CARACTERE]
[-j|--format=just-symbols]
[-l|--line-numbers] [--inlines]
[-n|-v|--numeric-sort]
[-P|--portability]
[-p|--no-sort]
[-r|--reverse-sort]
[-S|--print-size]
[-s|--print-armap]
[-t bază|--radix=bază]
[-u|--undefined-only]
[-U|--defined-only]
[-V|--version]
[-W|--no-weak]
[-X 32_64]
[--no-demangle]
[--no-recurse-limit|--recurse-limit]]
[--plugin nume]
[--size-sort]
[--special-syms]
[--synthetic]
[--target=nume-bfd]
[--unicode=metoda]
[--with-symbol-versions]
[--without-symbol-versions]
[fișier-obiect...]

DESCRIERE

GNU nm listează simbolurile din fișierele obiect fișier-obiect.... Dacă niciun fișier obiect nu este listat ca argument, nm presupune fișierul a.out.

Pentru fiecare simbol, nm afișează:

  • Valoarea simbolului, în baza selectată prin opțiuni (a se vedea mai jos) sau în hexazecimal în mod implicit.
  • Tipul de simbol. Se utilizează cel puțin următoarele tipuri; se pot utiliza și altele, în funcție de formatul fișierului obiect. Dacă este scris cu minuscule, simbolul este de obicei local; dacă este scris cu majuscule, simbolul este global (extern). Există totuși câteva simboluri minuscule care sunt afișate pentru simboluri globale speciale („u”, „v” și „w”).
"A"
Valoarea simbolului este absolută și nu va fi schimbată de o legătură ulterioară.
"B"
"b"
Simbolul se află în secțiunea de date BSS. Această secțiune conține de obicei date inițializate zero sau neinițializate, deși comportamentul exact depinde de sistem.
"C"
"c"
Simbolul este comun. Simbolurile comune sunt date neinițializate. La crearea unei legături, pot apărea mai multe simboluri comune cu același nume. În cazul în care simbolul este definit oriunde, simbolurile comune sunt tratate ca referințe nedefinite. Caracterul minuscul c este utilizat atunci când simbolul se află într-o secțiune specială pentru comunele mici.
"D"
"d"
Simbolul se află în secțiunea de date inițializate.
"G"
"g"
Simbolul se află într-o secțiune de date inițializate pentru obiecte mici. Unele formate de fișiere obiect permit un acces mai eficient la obiecte de date mici, cum ar fi o variabilă globală int, spre deosebire de o matrice globală mare.
"i"
În cazul fișierelor în format PE, acest lucru indică faptul că simbolul se află într-o secțiune specifică implementării DLL-urilor.

În cazul fișierelor în format ELF, acest lucru indică faptul că simbolul este o funcție indirectă. Aceasta este o extensie GNU la setul standard de tipuri de simboluri ELF. Acesta indică un simbol care, dacă este menționat printr-o realocare, nu este evaluat la adresa sa, ci trebuie să fie invocat în timpul execuției. Executarea în timp de execuție va returna apoi valoarea care va fi utilizată în realocare.

Notă - afișarea efectivă a simbolurilor pentru simbolurile indirecte GNU este controlată de opțiunea de linie de comandă --ifunc-chars. Dacă această opțiune a fost furnizată, atunci primul caracter din șirul de caractere va fi utilizat pentru simbolurile funcțiilor indirecte globale. Dacă șirul conține un al doilea caracter, acesta va fi utilizat pentru simbolurile funcțiilor indirecte locale.

"I"
Simbolul este o referință indirectă la un alt simbol.
"N"
Simbolul este un simbol de depanare.
"n"
Simbolul se află într-o secțiune de numai-citire fără date, fără cod și fără depanare.
"p"
Simbolul se află într-o secțiune de desfășurare a stivei.
"R"
"r"
Simbolul se află într-o secțiune de date numai-pentru-citire.
"S"
"s"
Simbolul se află într-o secțiune de date neinițializată sau cu inițializare zero pentru obiecte mici.
"T"
"t"
Simbolul se află în secțiunea de text (cod).
"U"
Simbolul este nedefinit.
"u"
Simbolul este un simbol global unic. Aceasta este o extensie GNU la setul standard de legături de simboluri ELF. Pentru un astfel de simbol, editorul de legături dinamice se va asigura că în întregul proces este utilizat un singur simbol cu acest nume și tip.
"V"
"v"
Simbolul este un obiect slab. Atunci când un simbol slab definit este legat de un simbol normal definit, simbolul normal definit este utilizat fără nicio eroare. Atunci când un simbol slab nedefinit este legat și simbolul nu este definit, valoarea simbolului slab devine zero fără nicio eroare. Pe unele sisteme, majusculele indică faptul că a fost specificată o valoare implicită.
"W"
"w"
Simbolul este un simbol slab care nu a fost etichetat în mod specific ca simbol obiect slab. Atunci când un simbol slab definit este legat de un simbol normal definit, simbolul normal definit este utilizat fără nicio eroare. Atunci când un simbol slab nedefinit este legat și simbolul nu este definit, valoarea simbolului este determinată într-un mod specific sistemului, fără erori. Pe unele sisteme, majusculele indică faptul că a fost specificată o valoare implicită.
"-"
Simbolul este un simbol stabs într-un fișier obiect a.out. În acest caz, următoarele valori afișate sunt câmpul stabs other, câmpul stabs desc și tipul de stab. Simbolurile stabs sunt utilizate pentru a păstra informații de depanare.
"?"
Tipul de simbol este necunoscut sau specific formatului de fișier obiect.
Numele simbolului. În cazul în care un simbol are asociate informații despre versiune, atunci sunt afișate și informațiile despre versiune. În cazul în care simbolul cu versiune este nedefinit sau ascuns de editorul de legături, șirul de versiuni este afișat ca sufix la numele simbolului, precedat de un caracter @. De exemplu, foo@VER_1. În cazul în care versiunea este versiunea implicită care urmează să fie utilizată la rezolvarea trimiterilor la simbol fără versiune, aceasta este afișată sub forma unui sufix precedat de două caractere @. De exemplu, foo@@VER_2.

OPȚIUNI

Forma lungă și forma scurtă a opțiunilor, prezentate aici ca alternative, sunt echivalente.

Fiecare simbol este precedat de numele fișierului de intrare (sau al membrului de arhivă) în care a fost găsit, în loc de a identifica fișierul de intrare o singură dată, înaintea tuturor simbolurilor sale.
Afișează toate simbolurile, chiar și simbolurile exclusiv pentru depanare; în mod normal, acestea nu sunt listate.
La fel ca --format=bsd (pentru compatibilitate cu MIPS nm).
Decodifică (demangle) numele simbolurilor de nivel scăzut în nume de nivel utilizator. În afară de eliminarea oricărei sublinieri inițiale preaplicate de sistem, acest lucru face ca numele funcțiilor C++ să fie mai ușor de citit. Compilatoare diferite au stiluri diferite de codificare. Argumentul opțional „demangling style (stil decodificare)” poate fi utilizat pentru a alege un stil de decodificare adecvat pentru compilatorul dumneavoastră.
Nu decodifică numele simbolurilor de nivel scăzut. Aceasta este opțiunea implicită.
Activează sau dezactivează limitarea numărului de recursivități efectuate în timpul decodificării șirurilor de caractere. Deoarece formatele de manipulare a numelor permit un nivel infinit de recursivitate, este posibil să se creeze șiruri a căror decodificare va epuiza spațiul de stivă disponibil pe calculatorul gazdă, declanșând o eroare de memorie. Limitarea încearcă să prevină acest lucru prin restricționarea recursivității la 2048 de niveluri de imbricare.

În mod implicit, această limită este activată, dar poate fi necesar să fie dezactivată pentru a dezmembra nume cu adevărat complicate. Rețineți totuși că, dacă limita de recursivitate este dezactivată, este posibilă epuizarea stivei și orice raport de eroare privind un astfel de eveniment va fi respins.

Afișează simbolurile dinamice în loc de simbolurile normale. Acest lucru este semnificativ numai pentru obiectele dinamice, cum ar fi anumite tipuri de biblioteci partajate.
Utilizează formatul de ieșire format, care poate fi „bsd”, „sysv”, „posix” sau „just-symbols”. Valoarea implicită este „bsd”. Numai primul caracter din format este semnificativ; acesta poate fi majusculă sau minusculă.
Afișează numai simboluri externe.
Afișează un rezumat al opțiunilor pentru nm și iese.
La afișarea simbolurilor funcțiilor indirecte GNU, nm va utiliza în mod implicit caracterul „i” atât pentru funcțiile indirecte locale, cât și pentru funcțiile indirecte globale. Opțiunea --ifunc-chars permite utilizatorului să specifice un șir de caractere care să conțină unul sau două caractere. Primul caracter va fi utilizat pentru simbolurile funcțiilor indirecte globale, iar al doilea caracter, dacă este prezent, va fi utilizat pentru simbolurile funcțiilor indirecte locale.
La fel cas --format=just-symbols.
Pentru fiecare simbol, utilizează informațiile de depanare pentru a încerca să găsească un nume de fișier și un număr de linie. Pentru un simbol definit, caută numărul de linie al adresei simbolului. Pentru un simbol nedefinit, caută numărul de linie al unei intrări de realocare care se referă la simbol. În cazul în care se pot găsi informații despre numărul de linie, acestea se imprimă după celelalte informații despre simbol.
Atunci când opțiunea -l este activă, dacă adresa aparține unei funcții care a fost expandată în linie „inlined”, atunci această opțiune determină afișarea și a informațiilor sursă pentru toate domeniile de cuprindere până la prima funcție ne-expandată în linie „non-inlined”. De exemplu, dacă „main” expandează în linie „callee1” care expandează în linie „callee2”, și adresa este din „callee2”, informațiile sursă pentru „callee1” și „main” vor fi deasemenea afișate.
Sortează simbolurile numeric în funcție de adresele lor, mai degrabă decât în ordine alfabetică după nume.
Nu se deranjează să sorteze simbolurile în nicio ordine, ci le imprimă în ordinea întâlnită.
Utilizează formatul de ieșire standard POSIX.2 în locul formatului implicit. Echivalent cu -f posix.
Inversează ordinea de sortare (fie ea numerică sau alfabetică); lasă ultimul să fie primul.
Imprimă atât valoarea, cât și dimensiunea simbolurilor definite pentru stilul de ieșire „bsd”. Această opțiune nu are niciun efect pentru formatele de obiecte care nu înregistrează dimensiunile simbolurilor, cu excepția cazului în care se utilizează și --size-sort, caz în care se afișează o dimensiune calculată.
La enumerarea simbolurilor din membrii arhivei, include indexul: o cartografiere (stocată în arhivă prin ar sau ranlib) a modulelor care conțin definiții pentru care nume.
Utilizează bază ca bază pentru imprimarea valorilor simbolurilor. Aceasta trebuie să fie d pentru zecimal, o pentru octal sau x pentru hexazecimal.
Afișează numai simbolurile nedefinite (cele externe fiecărui fișier obiect). În mod implicit, sunt afișate atât simbolurile definite, cât și cele nedefinite.
Afișează numai simbolurile definite pentru fiecare fișier obiect. În mod implicit, sunt afișate atât simbolurile definite, cât și cele nedefinite.
Afișează numărul versiunii de nm și iese.
Această opțiune este ignorată pentru compatibilitate cu versiunea AIX a nm. Aceasta acceptă un parametru care trebuie să fie șirul 32_64. Modul implicit al AIX nm corespunde -X 32, care nu este acceptat de GNU nm.
Încarcă modulul numit nume pentru a adăuga suport pentru alte tipuri de ținte. Această opțiune este disponibilă numai dacă setul de instrumente a fost construit cu suportul pentru module activat.

Dacă opțiunea --plugin nu este furnizată, dar suportul pentru module a fost activat, atunci nm parcurge fișierele din ${libdir}/bfd-plugins în ordine alfabetică și se utilizează primul modul de extensie care revendică obiectul în cauză.

Vă rugăm să rețineți că acest director de căutare de module nu este cel folosit de opțiunea -plugin a ld. Pentru ca nm să utilizeze modulul editorului de legături, acesta trebuie copiat în directorul ${libdir}/bfd-plugins. Pentru compilațiile bazate pe GCC, modulul editorului de legături se numește liblto_plugin.so.0.0.0.0. Pentru compilațiile bazate pe Clang, acesta se numește LLVMgold.so. Modulul GCC este întotdeauna compatibil cu versiunile anterioare, astfel încât este suficient să se copieze doar cel mai nou.

Sortează simbolurile în funcție de dimensiune. Pentru obiectele ELF, dimensiunile simbolurilor sunt citite din ELF, iar pentru alte tipuri de obiecte, dimensiunile simbolurilor sunt calculate ca diferență între valoarea simbolului și valoarea simbolului cu valoarea imediat superioară. În cazul în care se utilizează formatul de ieșire „bsd”, se imprimă dimensiunea simbolului, și nu valoarea, iar -S trebuie să fie utilizată pentru ca atât dimensiunea, cât și valoarea să fie imprimate.

Notă - această opțiune nu funcționează dacă --undefined-only a fost activată, deoarece simbolurile nedefinite nu au dimensiune.

Afișează simbolurile care au o semnificație specială specifică pentru țintă. Aceste simboluri sunt utilizate de obicei de către țintă pentru anumite prelucrări speciale și, în mod normal, nu sunt utile atunci când sunt incluse în listele normale de simboluri. De exemplu, pentru țintele ARM, această opțiune ar omite simbolurile de cartografiere utilizate pentru a marca tranzițiile între codul ARM, codul THUMB și date.
Include simbolurile sintetice în rezultat. Acestea sunt simboluri speciale create de către editorul de legături în diverse scopuri. Ele nu sunt afișate în mod implicit, deoarece nu fac parte din codul sursă original al binarului.
Controlează afișarea caracterelor multi-octet codificate UTF-8 în șiruri de caractere. În mod implicit (--unicode=default), acestea nu beneficiază de un tratament special. Opțiunea --unicode=locale afișează secvența în limba locală curentă, care poate să le suporte sau nu. Opțiunile --unicode=hex și --unicode=invalid le afișează sub formă de secvențe de octeți hexazecimali, încadrate fie de paranteze unghiulare, fie de paranteze drepte.

Opțiunea --unicode=escape le afișează ca secvențe de eludare (\uxxxx), iar opțiunea --unicode=highlight le afișează ca secvențe de eludare evidențiate cu roșu (dacă sunt acceptate de dispozitivul de ieșire). Culoarea are rolul de a atrage atenția asupra prezenței secvențelor unicode acolo unde nu ar fi de așteptat.

Nu afișează simboluri slabe.
Activează sau dezactivează afișarea informațiilor privind versiunea simbolului. Șirul de versiuni este afișat ca sufix la numele simbolului, precedat de un caracter @. De exemplu, foo@VER_1. În cazul în care versiunea este versiunea implicită care urmează să fie utilizată la rezolvarea trimiterilor la simbol fără versiune, aceasta este afișată sub forma unui sufix precedat de două caractere @. De exemplu, foo@@VER_2. În mod implicit, se afișează informațiile privind versiunea simbolului.
Specifică un alt format de cod obiect decât formatul implicit al sistemului dumneavoastră.
@fișier
Citește opțiunile liniei de comandă din fișier. Opțiunile citite sunt inserate în locul opțiunii originale @fișier. Dacă fișier nu există sau nu poate fi citit, atunci opțiunea va fi tratată literal și nu va fi eliminată.

Opțiunile din fișier sunt separate prin spații albe. Un caracter de spațiere poate fi inclus într-o opțiune prin includerea întregii opțiuni între ghilimele simple sau duble. Orice caracter (inclusiv o bară oblică inversă) poate fi inclus prin prefixarea caracterului care urmează să fie inclus cu o bară oblică inversă. fișier poate conține la rândul său opțiuni @fișier suplimentare; orice astfel de opțiuni vor fi procesate în mod recursiv.

CONSULTAȚI ȘI

ar(1), objdump(1), ranlib(1), și intrările Info pentru binutils.

DREPTURI DE AUTOR

Drepturi de autor © 1991-2024 Free Software Foundation, Inc.

Se acordă permisiunea de a copia, distribui și/sau modifica acest document în conformitate cu termenii Licenței GNU Free Documentation, versiunea 1.3 sau orice versiune ulterioară publicată de Free Software Foundation; fără secțiuni invariante, fără texte de copertă și fără texte de contra copertă. O copie a licenței este inclusă în secțiunea intitulată „GNU Free Documentation License”.

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

21 februarie 2024 binutils-2.42