GNU/Linux >> Linux Esercitazione >  >> Linux

Tutorial sui comandi Linux nm per principianti (10 esempi)

Se sei un utente Linux che si occupa anche dello sviluppo di software a livello di sistema, potresti trovarti in situazioni in cui hai bisogno di informazioni relative ai simboli in un file oggetto. Sarai felice di sapere che esiste un'utilità da riga di comando, soprannominata nm - che puoi utilizzare in queste situazioni.

In questo tutorial, discuteremo le basi di questo strumento utilizzando alcuni esempi di facile comprensione. Ma prima di farlo, vale la pena ricordare che tutti gli esempi qui presenti sono stati testati su una macchina Ubuntu 16.04 LTS.

Comando Linux nm

L'utilità della riga di comando nm elenca fondamentalmente i simboli dai file oggetto. Ecco la sintassi dello strumento:

nm [OPTIONS] OBJECT-FILENAME

E di seguito è come lo spiega la pagina man del comando:

       GNU nm lists the symbols from object files objfile....  If no object
       files are listed as arguments, nm assumes the file a.out.

Di seguito sono riportati alcuni esempi in stile domande e risposte che ti daranno un'idea migliore di come funziona nm.

Q1. Come funziona il comando nm?

L'utilizzo di base di questo comando è molto semplice:tutto ciò che devi fare è eseguire il comando 'nm' e passare il nome del file oggetto come input. Ad esempio, ho usato il comando nm con il file binario 'apl':

nm apl

Lo screenshot seguente mostra il tipo di output prodotto dal comando precedente:

Le tre colonne prodotte in output rappresentano rispettivamente il valore del simbolo, il tipo di simbolo e il nome del simbolo. Esistono diversi tipi di simboli:per conoscere i dettagli completi, vai alla pagina man del comando nm.

Q2. Come fare in modo che i nomi dei file precedano ogni simbolo nell'output?

Puoi farlo usando il -A opzione della riga di comando.

nm -A [obj-file]

Ad esempio:

nm -A apl

Quindi puoi vedere che il nome del file è stato aggiunto all'inizio di ogni riga.

T3. Come fare in modo che nm visualizzi anche i simboli del debugger?

Per fare in modo che nm visualizzi anche i simboli del debugger nell'output, usa -a opzione della riga di comando.

nm -a [obj-filename]

Ad esempio:

nm -a apl

Il comando precedente visualizzerà tutti i simboli, inclusi i simboli del solo debugger che normalmente non sono elencati.

Q4. Come fare in modo che nm decodifichi i nomi dei simboli di basso livello?

Se lo desideri, puoi persino forzare nm a decodificare i nomi dei simboli di basso livello in nomi di livello utente. Puoi farlo usando l'opzione della riga di comando -C.

nm -C [obj-file]

Ad esempio:

nm -C apl

Ecco cosa ha da dire la pagina man su questa opzione:

           Besides removing any initial underscore prepended by the system,
           this makes C++ function names readable. Different compilers have
           different mangling styles. The optional demangling style argument
           can be used to choose an appropriate demangling style for your
           compiler.

Q5. Come fare in modo che nm visualizzi solo simboli dinamici?

Nel caso in cui desideri che nm visualizzi solo simboli dinamici, anziché i simboli normali, usa il -D opzione della riga di comando.

nm -D [obj-file]

Ad esempio:

nm -D apl

Quindi puoi vedere che nm ha prodotto solo simboli dinamici nell'output.

Q6. Come utilizzare diversi formati di output nm?

Per abilitare diversi formati di output, utilizzare l'opzione della riga di comando -f. Per impostazione predefinita, l'output viene prodotto nel formato bsd, tuttavia, se lo desideri, puoi abilitare anche i formati 'sysv' e 'posix'.

nm -f [format] [obj-filename]

Ad esempio:

nm -f posix apl

Osserva la modifica del formato ora.

Q7. Come fare in modo che nm visualizzi solo simboli esterni?

Questo puoi ottenerlo usando l'opzione della riga di comando -g.

nm -g [obj-file]

Ad esempio:

nm -g  apl

D8. Cosa offre tutte le opzioni di ordinamento nm?

Per impostazione predefinita, i simboli sono ordinati in ordine alfabetico. Tuttavia, se lo desideri, puoi ordinarli numericamente in base ai loro indirizzi utilizzando -n opzione della riga di comando.

nm -n [objfile]

Ad esempio:

nm -n apl

Quindi puoi vedere che ora l'output è ordinato per indirizzi.

Nel caso in cui non desideri che nm applichi alcun tipo di ordinamento (incluso quello predefinito che utilizza), usa l'opzione della riga di comando -p. Andando avanti, per invertire qualsiasi ordinamento esistente, usa l'opzione della riga di comando -r.

Q9. Come fare in modo che nm visualizzi solo simboli non definiti?

Puoi farlo usando -u opzione della riga di comando.

nm -u [obj-file]

Ad esempio:

nm -u apl

Q10. Come fare in modo che nm visualizzi solo simboli definiti?

Per fare in modo che nm visualizzi solo simboli definiti, usa --defined-only opzione della riga di comando.

nm --defined-only [obj-file]

Ad esempio:

nm --defined-only apl

Conclusione

D'accordo, il comando nm ha un pubblico di nicchia, ma la mia esperienza personale dice che anche se non ti consideri parte di quel pubblico, tieni presente che esiste uno strumento del genere. E per coloro che desiderano utilizzare questa utility, una volta terminato di esercitarsi con tutti gli esempi qui, andare alla pagina man di nm per saperne di più.


Linux
  1. Tutorial sul comando cd di Linux per principianti (8 esempi)

  2. Tutorial comando Linux comm per principianti (5 esempi)

  3. Linux df Command Tutorial per principianti (8 esempi)

  4. Tutorial sul comando della data di Linux per principianti (8 esempi)

  5. Tutorial sul comando del nome host Linux per principianti (5 esempi)

Linux who Command Tutorial per principianti (8 esempi)

Linux nl Command Tutorial per principianti (7 esempi)

Esercitazione sui comandi lscpu Linux per principianti (5 esempi)

Esercitazione sui comandi OD Linux per principianti (6 esempi)

Linux w Command Tutorial per principianti (5 esempi)

Tutorial sui comandi Linux ss per principianti (8 esempi)