GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel de commande Linux nm pour les débutants (10 exemples)

Si vous êtes un utilisateur Linux qui est également dans le développement de logiciels au niveau du système, vous pouvez vous retrouver dans des situations où vous avez besoin d'informations relatives aux symboles dans un fichier objet. Vous serez heureux de savoir qu'il existe un utilitaire de ligne de commande - appelé nm - que vous pouvez utiliser dans ces situations.

Dans ce didacticiel, nous aborderons les bases de cet outil à l'aide d'exemples faciles à comprendre. Mais avant cela, il convient de mentionner que tous les exemples ici ont été testés sur une machine Ubuntu 16.04 LTS.

Commande nm Linux

L'utilitaire de ligne de commande nm répertorie essentiellement les symboles des fichiers objets. Voici la syntaxe de l'outil :

nm [OPTIONS] OBJECT-FILENAME

Et voici comment la page de manuel de la commande l'explique :

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

Voici quelques exemples sous forme de questions-réponses qui vous donneront une meilleure idée du fonctionnement de nm.

Q1. Comment fonctionne la commande nm ?

L'utilisation de base de cette commande est très simple - tout ce que vous avez à faire est d'exécuter la commande 'nm' et de lui transmettre le nom du fichier objet en entrée. Par exemple, j'ai utilisé la commande nm avec le fichier binaire 'apl' :

nm apl

La capture d'écran suivante montre le type de sortie produite par la commande ci-dessus :

Les trois colonnes produites en sortie représentent respectivement la valeur du symbole, le type de symbole et le nom du symbole. Il existe plusieurs types de symboles - pour connaître tous les détails, rendez-vous sur la page de manuel de la commande nm.

Q2. Comment faire pour que les noms de fichiers précèdent chaque symbole dans la sortie ?

Vous pouvez le faire en utilisant le -A option de ligne de commande.

nm -A [obj-file]

Par exemple :

nm -A apl

Ainsi, vous pouvez voir que le nom du fichier a été ajouté au début de chaque ligne.

Q3. Comment faire en sorte que nm affiche également les symboles du débogueur ?

Pour que nm affiche également les symboles du débogueur dans la sortie, utilisez le -a option de ligne de commande.

nm -a [obj-filename]

Par exemple :

nm -a apl

La commande ci-dessus affichera tous les symboles, y compris les symboles réservés au débogueur qui ne sont normalement pas répertoriés.

Q4. Comment faire en sorte que nm décode les noms de symboles de bas niveau ?

Si vous le souhaitez, vous pouvez même forcer nm à décoder les noms de symboles de bas niveau en noms de niveau utilisateur. Vous pouvez le faire en utilisant l'option de ligne de commande -C.

nm -C [obj-file]

Par exemple :

nm -C apl

Voici ce que la page de manuel a à dire sur cette option :

           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. Comment faire en sorte que nm n'affiche que des symboles dynamiques ?

Si vous souhaitez que nm affiche uniquement les symboles dynamiques, plutôt que les symboles normaux, utilisez le -D option de ligne de commande.

nm -D [obj-file]

Par exemple :

nm -D apl

Vous pouvez donc voir que nm n'a produit que des symboles dynamiques dans la sortie.

Q6. Comment utiliser différents formats de sortie nm ?

Pour activer différents formats de sortie, utilisez l'option de ligne de commande -f. Par défaut, la sortie est produite au format bsd, cependant, si vous le souhaitez, vous pouvez également activer les formats 'sysv' et 'posix'.

nm -f [format] [obj-filename]

Par exemple :

nm -f posix apl

Observez le changement de format maintenant.

Q7. Comment faire en sorte que nm n'affiche que des symboles externes ?

Vous pouvez y parvenir en utilisant l'option de ligne de commande -g.

nm -g [obj-file]

Par exemple :

nm -g  apl

Q8. Quelles sont les options de tri fournies par nm ?

Par défaut, les symboles sont triés par ordre alphabétique. Cependant, si vous le souhaitez, vous pouvez les trier numériquement par leurs adresses en utilisant le -n option de ligne de commande.

nm -n [objfile]

Par exemple :

nm -n apl

Ainsi, vous pouvez voir que la sortie est triée par adresses maintenant.

Si vous ne souhaitez pas que nm applique un type de tri (y compris celui par défaut qu'il utilise), utilisez l'option de ligne de commande -p. Ensuite, pour inverser tout tri existant, utilisez l'option de ligne de commande -r.

Q9. Comment faire en sorte que nm n'affiche que des symboles non définis ?

Vous pouvez le faire en utilisant le -u option de ligne de commande.

nm -u [obj-file]

Par exemple :

nm -u apl

Q10. Comment faire en sorte que nm n'affiche que des symboles définis ?

Pour que nm n'affiche que des symboles définis, utilisez le --defined-only option de ligne de commande.

nm --defined-only [obj-file]

Par exemple :

nm --defined-only apl

Conclusion

D'accord, la commande nm a un public de niche, mais mon expérience personnelle dit que même si vous ne vous considérez pas comme faisant partie de ce public, gardez à l'esprit qu'un tel outil existe. Et pour ceux qui souhaitent utiliser cet utilitaire, une fois que vous avez terminé de pratiquer tous les exemples ici, rendez-vous sur la page de manuel nm pour en savoir plus.


Linux
  1. Tutoriel de commande cd Linux pour les débutants (8 exemples)

  2. Tutoriel de commande Linux comm pour les débutants (5 exemples)

  3. Tutoriel de commande Linux df pour les débutants (8 exemples)

  4. Tutoriel de commande de date Linux pour les débutants (8 exemples)

  5. Tutoriel de commande de nom d'hôte Linux pour les débutants (5 exemples)

Tutoriel Linux who Command pour débutants (8 exemples)

Tutoriel de commande Linux nl pour les débutants (7 exemples)

Tutoriel de commande Linux lscpu pour les débutants (5 exemples)

Tutoriel de commande Linux OD pour les débutants (6 exemples)

Tutoriel de commande Linux w pour débutants (5 exemples)

Tutoriel de commande Linux ss pour les débutants (8 exemples)