NM(1)

NOME
nm - elenca i simboli dai file oggetto

SINTASSI
nm [-A|-o|--print-file-name]
   [-a|--debug-syms]
   [-B|--format=bsd]
   [-C|--demangle[=stile]]
   [-D|--dynamic]
   [-fformat|--format=formato]
   [-g|--extern-only]
   [-h|--help]
   [--ifunc-chars=CARATTERI]
   [-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 radix|--radix=base]
   [-u|--undefined-only]
   [-U|--defined-only]
   [-V|--version]
   [-W|--no-weak]
   [-X 32_64]
   [--no-demangle]
   [--no-recurse-limit|--recurse-limit]]
   [--plugin nome]
   [--size-sort]
   [--special-syms]
   [--synthetic]
   [--target=bfdname]
   [--unicode=metodo]
   [--with-symbol-versions]
   [--without-symbol-versions]
   [fileoggetto...]

DESCRIZIONE
GNU nm elenca i simboli dai file oggetto fileoggetto.... Se come argomento non viene indicato alcun file oggetto, nm prende il file a.out.

Per ciascun simbolo, nm mostra:

•   Il valore del simbolo, nella base selezionata dalle opzioni (vedere sotto), o in quella predefinita esadecimale.

•   Il tipo di simbolo. Sono usati almeno i seguenti tipi; altri sono, ovviamente, dipendenti dal formato del file oggetto. Se minuscolo, il simbolo è normalmente locale; se maiuscolo il simbolo è globale (esterno). Ci sono comunque alcuni simboli minuscoli che sono indicati per simboli globali speciali ("u", "v" e "w").

    "A" Il valore del simbolo è assoluto, e non verrà cambiato da ulteriori collegamenti.

    "B"
    "b" Il simbolo è nella sezione dati BSS. Questa sezione contiene tipicamente dati inizializzati a zero o non inizializzati, nonostante il comportamento esatto sia dipendente dal sistema.

    "C"
    "c" Il simbolo è comune. I simboli comuni sono dati non inizializzati. Durante il collegamento, simboli multipli comuni possono apparire con lo stesso nome. Se il simbolo è definito da qualche parte, i simboli comuni sono trattati come riferimenti non definiti. La lettera c minuscola è usata quando i simbolo è in una sezione speciale per piccoli comuni.

    "D"
    "d" Il simbolo è nella sezione dati inizializzata.

    "G"
    "g" Il simbolo è in una sezione dati inizializzata per piccoli oggetti. Alcuni formati di file oggetto permettono un accesso più efficiente a piccoli oggetti dati, come una variabile globale intera rispetto a un grande vettore globale.

    "i" Per file in formato PE questo indica che il simbolo è in una sezione specifica per l'implementazione di DLL.

        Per file in formato ELF questo indica che il simbolo è una funzione indiretta. Si tratta di una estensione GNU all'insieme standard dei tipi di simbolo ELF. Indica un simbolo che è referenziato ma che non viene tradotto in un indirizzo, che va invece valutato durante l'esecuzione. All'esecuzione restituirà un valore da usare per la rilocazione.

        Nota - i simboli mostrati effettivamente per l'indirezione GNU sono controllati dall'opzione a riga di comando --ifunc-chars. Se questa opzione è stata fornita allora il primo carattere della stringa verrà usato per i simboli di funzione indiretta globale. Se la stringa contiene un secondo carattere questo verrà usato per i simboli di funzione indiretta locale.

    "I" Il simbolo è un riferimento indiretto a un altro simbolo.

    "N" Il simbolo è un simbolo di debug.

    "n" Il simbolo è in una sezione non-dati, non-codice, non-debug a sola lettura.

    "p" Questo simbolo è in una sezione "stack unwind".

    "R"
    "r" Il simbolo è in una sezione dati a sola lettura.

    "S"
    "s" Il simbolo è in una sezione dati per piccoli oggetti non inizializzata o inizializzata a zero.

    "T"
    "t" Il simbolo è nella sezione testo (codice).

    "U" Il simbolo non è definito.

    "u" Il simbolo è un simbolo globale unico. Questa è un'estensione GNU all'insieme standard di simboli ELF. Per un simile simbolo il linker farà in modo che nell'intero processo un solo simbolo con questo nome e questo tipo sia usato.

    "V"
    "v" Il simbolo è un oggetto debole. Quando un simbolo definito debole è collegato con un simbolo definito normalmente, il simbolo definito normale è usato senza errori. Quando un simbolo indefinito debole è collegato e il simbolo non è definito, il valore del simbolo debole diviene zero senza alcun errore. In alcuni sistemi, la maiuscola sta ad indicare che è stato fornito un valore predefinito.

    "W"
    "w" Il simbolo è un simbolo debole che non è stato classificato specificatamente come oggetto simbolo debole. Quando un simbolo definito debole è collegato con un simbolo definito normale, il simbolo definito normale è usato senza alcun errore. Quando un simbolo indefinito debole è collegato e il simbolo non è definito, il valore del simbolo è determinato in una modalità dipendente dal sistema senza errori. In alcuni sistemi, la maiuscola sta ad indicare che è stato fornito un valore predefinito.

    "-" Il simbolo è un simbolo stab in un file oggetto a.out. In questo caso i successivi valori stampati sono l'altro campo stab, il campo stab desc e il tipo stab. I simboli stab sono usati per mantenere le informazioni di debug.

    "?" Il tipo del simbolo è sconosciuto o specifico del formato del file oggetto.

•   Il nome del simbolo, Se un simbolo ha associata un'informazione di versione, viene mostrata anche questa informazione. Se il simbolo con versione è indefinito o nascosto al linker, la stringa di versione è mostrata come suffisso del nome del simbolo preceduta dal carattere @. Per esempio foo@VER_1. Se la versione è quella predefinita da utilizzare quando si risolvono riferimenti senza versioni a simboli, allora viene mostrata compre suffisso preceduta da due caratteri @. Per esempio foo@@VER_2.

OPZIONI
Le opzioni nei formati lungo e corto, qui mostrate come alternative, sono equivalenti.

-A
-o
--print-file-name
    Fa precedere a ciascun simbolo il nome del file input (o membro dell'archivio) nel quale è stato trovato, invece che identificare il file di input solo una volta prima di tutti i suoi simboli.

-a
--debug-syms
    Mostra tutti i simboli, anche i simboli esclusivi del debugger; normalmente questi non sono elencati.

-B  Lo stesso che --format=bsd (per compatibilità con MIPS nm).

-C
--demangle[=stile]
    Decodifica (demangle) i nomi dei simboli di basso livello in nomi a livello utente. Oltre a rimuovere ogni underscore iniziale aggiunto dal sistema questo rende leggibili i nomi di funzioni C++ . Differenti compilatori hanno differenti stili di codifica. L'argomento opzionale dello stile di decodifica può essere usato per scegliere uno stile appropriato di decodifica per il proprio compilatore.

--no-demangle
    Non decodifica i nomi di simboli di basso livello. Questo è il predefinito.

--recurse-limit
--no-recurse-limit
--recursion-limit
--no-recursion-limit
    Abilitata o disabilita il limite della ricorsione effettuata durante la decodifica («demangling») delle stringhe. Poiché i formati di «mangling» permettono un livello infinito di ricorsione è possibile creare stringhe la cui decodifica riempirebbe lo stack disponibile sulla macchina, generando un problema di accesso alla memoria. Il limite cerca di evitare questa situazione, restringendo la ricorsione ad un massimo di 2048 livelli.

    Il comportamento predefinito è di avere il limite abilitato, ma disabilitarlo potrebbe essere necessario per decodificare nomi veramente complessi. Notare che se il limite di ricorsione viene disabilitato allora è possibile saturare lo stack, e qualsiasi segnalazione di bug su questa situazione verrà rigettata.

-D
--dynamic
    Mostra i simboli dinamici invece dei simboli normali. Ciò è significativo solo per gli oggetti dinamici, come certi tipi di librerie condivise.

-f formato
--format=formato
    Usa il formato di output formato, che può essere "bsd", "sysv", "posix" o "just-symbols". Il predefinito è "bsd". Solo il primo carattere di formato è significativo; esso può essere indifferentemente maiuscolo o minuscolo.

-g
--extern-only
    Mostra solo i simboli esterni.

-h
--help
    Mostra un sommario delle opzioni di nm ed esce.

--ifunc-chars=CARATTERI
    Quando mostra i simboli di funzione indiretta GNU, nm userà automaticamente il carattere "i" sia per le funzioni indirette locali che per le funzioni indirette globali. L'opzione --ifunc-chars permette che l'utente indichi una stringa contenente uno o due caratteri. Il primo carattere verrà usato per i simboli di funzione indiretta globale e il secondo carattere, se presente, verrà usato per i simboli di funzione indiretta locale.

j   Lo steso che --format=just-symbols.

-l
--line-numbers
    Per ciascun simbolo usa le informazioni di debug per tentare di trovare un nome file e un numero di linea. Per un simbolo definito cerca il numero di linea dell'indirizzo del simbolo. Per un simbolo indefinito cerca il numero di linea di un campo di rilocazione che fa riferimento al simbolo. Se l'informazione del numero di linea può essere trovata la stampa dopo l'altra informazione sul simbolo.

--inlines
    Quando l'opzione -l è usata, se l'indirizzo appartiene ad una funzione che è stata messa inline, questa opzione causa anche la stampa delle informazioni sul sorgente della prima apparizione della funzione. Per esempio, se "main" ha inline "chiamato1" che a sua volta ha inline "chiamato2", e l'indirizzo è di "chiamato2", verranno stampate anche le informazioni sul sorgente di "chiamato1" e "main"

-n
-v
--numeric-sort
    Ordina i simboli numericamente secondo il loro indirizzo, invece che alfabeticamente per nome.

-p
--no-sort
    Non si preoccupa di ordinare i simboli secondo nessun criterio; li stampa nell'ordine in cui li trova.

-P
--portability
    Usa il formato di output standard POSIX.2 invece del formato predefinito. Equivale a -f posix.

-r
--reverse-sort
    Inverte il senso dell'ordinamento (sia esso numerico o alfabetico); mette l'ultimo come primo.

-S
--print-size
    Stampa sia valore che dimensione dei simboli definiti per il formato di output "bsd". Questa opzione non ha effetto per quei formati che non memorizzano le dimensioni degli oggetti a meno che non sia usato anche --size-sort nel qual caso viene mostrata una dimensione calcolata.

-s
--print-armap
    Quando elenca i simboli da membri dell'archivio include l'indice: una mappatura (memorizzata nell'archivio da ar o ranlib) di quali moduli contengono definizioni per quali nomi.

-t base
--radix=base
    Usa base come base per stampare i valori dei simboli. Deve essere d per il decimale, o per l'ottale o x per l'esadecimale.

-u
--undefined-only
    Mostra solo i simboli non definiti (quelli esterni ai file oggetto). Normalmente vengono mostrati sia i simboli definiti che i non definiti.

-U
--defined-only
    Mostra solo i simboli definiti per ciascun file oggetto. Normalmente vengono mostrati sia i simboli definiti che i non definiti.

-V
--version
    Mostra il numero di versione di nm ed esce.

-X  Questa opzione è ignorata per compatibilità con la versione AIX di nm. Essa prende un parametro che deve essere la stringa 32_64. I modi di default di AIX nm corrispondono a -X 32, che non è supportato da GNU nm.

--plugin nome
    Carica il plugin chiamato nome per aggiungere il supporto a tipi di file extra. Quest'opzione è disponibile solamente se la toolchain è stata compilata con il supporto abilitato per i plugin.

    Se --plugin non viene usato, ma il supporto per i plugin stato abilitato, allora nm testa, uno alla volta e in ordine alfabetico, i file in ${libdir}/bfd-plugins e utilizza il primo che attesti di conoscere l'oggetto in questione.

    Notare che questa directory di ricerca dei plugin non è usata dall'opzione --plugin di ld. Per far sì che nm usi il plugin del linker è necessario che sia copiato nella directory ${libdir}/bfd-plugins. Per compilazioni basate su GCC, il plugin del linker è chiamato liblto_plugin.so.0.0.0. Per compilazioni basate su Clang è chiamato LLVMgold.so. Il plugin GCC è sempre retro compatibile con versioni precedenti, quindi è sufficiente copiare l'ultimo.

--size-sort
    Ordina i simboli per dimensione. Per oggetti ELF la dimensione è letta dal file ELF, mentre per altri tip idi oggetto è conteggiata come differenza tra il valore del simbolo e il valore del simbolo con il successivo valore maggiore. Se è usato il formato di output "bsd" viene stampata la dimensione del simbolo invece del valore, e per stampare sia dimensione che valore bisogna usare -S.

    Nota - quest'opzione non funziona se è stato usato --undefined-only perché i simboli non definiti non hanno dimensione.

--special-syms
    Mostra simboli che hanno un significato speciale target-specific. Questi simboli sono normalmente usati dal target per alcune gestioni speciali e normalmente non sono di aiuto quando inclusi nei normali elenchi di simboli. Per esempio per i target ARM questa opzione salterà i simboli di mappatura usati per segnare le transizioni tra codice ARM, codice THUMB e dati.

--synthetic
    Include nell'output simboli sintetici. Si tratta di simboli speciali creati dal linker per vari scopi. Normalmente non sono mostrati poiché non fanno parte del codice sorgente che ha generato il binario.

--unicode=[default|invalid|locale|escape|hex|highlight]
    Controlla come mostrare le stringhe di caratteri multibyte codificate in UTF-8. Il valore predefinito (--unicode=default) è di non trattarli in maniera speciale. L'opzione --unicode=locale mostra la sequenza nella locale attuale, che potrebbe non supportarli. Le opzioni --unicode=hex e --unicode=invalid le mostrano come sequenze di byte esadecimali racchiuse tra parentesi angolari o graffe.

    L'opzione --unicode=escape le mostra come sequenze escape (\uxxxx) e la --unicode=highlight come sequenze escape evidenziate in rosso (se supportato dal device di output). Il colore ha lo scopo di attirare l'attenzione sulla presenza di sequenze unicode che potrebbe essere inaspettate

-W
--no-weak
    Non mostra i simboli «weak».

--with-symbol-versions
--without-symbol-versions
    Abilita o disabilita la stampa delle informazioni di versione del simbolo. La stringa di versione è mostrata come suffisso al nome simbolo, preceduta da un carattere @. Per esempio foo@VER_1. Se la versione è quella predefinita da usare durante la risoluzione di una referenza senza versione al simbolo, allora viene mostrata come suffisso preceduta da due caratteri @. Ad esempio foo@@VER_2. Normalmente viene mostrata l'informazione di versione del simbolo.

--target=nomebfd
    Specifica un formato di codice oggetto diverso dal formato predefinito del sistema in uso.

@file
    Legge le opzioni da riga di comando da file. Le opzioni lette sono inserite al posto dell'opzione originale @file. Se file non esiste o non può essere letto, l'opzione sarà trattata letteralmente, e non rimossa.

    Le opzioni in file sono separate da spazi vuoti. Si può includere uno spazio vuoto in un'opzione racchiudendo l'intera opzione fra apici, singoli o doppi. Può essere incluso qualsiasi carattere (compresa la barra inversa) facendo precedere al carattere una barra inversa. Il file può esso stesso contenere ulteriori opzioni @file; ciascuna di queste opzioni sarà elaborata ricorsivamente.

VEDERE ANCHE
ar(1), objdump(1), ranlib(1) e i campi Info per binutils.

COPYRIGHT
Copyright (c) 1991-2026 Free Software Foundation, Inc.

È permesso copiare, distribuire e/o modificare questo documento nei termini della “Licenza per documentazione libera GNU” (GNU Free Documentation License), versione 1.3 o ogni versione successiva pubblicata dalla Free Software Foundation; senza sezioni non modificabili, senza testi di prima di copertina e di quarta di copertina. Una copia della licenza è inclusa nella sezione intitolata “Licenza per la documentazione libera GNU" (GNU Free Documentation License).

TRADUZIONE
La traduzione italiana di questa pagina di manuale è stata creata da Giulio Daprelà <giulio@pluto.it>, Marco Curreli <marcocurreli@tiscali.it> e Giuseppe Sacco <eppesuig@debian.org>

Questa traduzione è documentazione libera; leggere la GNU General Public License Versione 3 (https://www.gnu.org/licenses/gpl-3.0.html) o successiva per le condizioni di copyright. Non ci assumiamo alcuna responsabilità.

Per segnalare errori nella traduzione di questa pagina di manuale inviare un messaggio a pluto-ildp@lists.pluto.it.