GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-nm-Befehls-Tutorial für Anfänger (10 Beispiele)

Wenn Sie ein Linux-Benutzer sind, der sich auch mit der Entwicklung von Software auf Systemebene befasst, finden Sie sich möglicherweise in Situationen wieder, in denen Sie Informationen zu Symbolen in einer Objektdatei benötigen. Es wird Sie freuen zu hören, dass es ein Befehlszeilenprogramm namens nm gibt - die Sie in diesen Situationen verwenden können.

In diesem Tutorial werden wir die Grundlagen dieses Tools anhand einiger leicht verständlicher Beispiele erörtern. Aber bevor wir das tun, ist es erwähnenswert, dass alle Beispiele hier auf einem Ubuntu 16.04 LTS-Rechner getestet wurden.

Linux-nm-Befehl

Das Befehlszeilendienstprogramm nm listet im Wesentlichen Symbole aus Objektdateien auf. Hier ist die Syntax des Tools:

nm [OPTIONS] OBJECT-FILENAME

Und im Folgenden wird es in der Manpage des Befehls erklärt:

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

Im Folgenden finden Sie einige Beispiele im Q&A-Stil, die Ihnen eine bessere Vorstellung davon vermitteln, wie nm funktioniert.

Q1. Wie funktioniert der nm-Befehl?

Die grundlegende Verwendung dieses Befehls ist sehr einfach – alles, was Sie tun müssen, ist, den Befehl „nm“ auszuführen und den Namen der Objektdatei als Eingabe an ihn zu übergeben. Zum Beispiel habe ich den nm-Befehl mit der 'apl'-Binärdatei verwendet:

nm apl

Der folgende Screenshot zeigt die Art der Ausgabe, die der obige Befehl erzeugt:

Die drei in der Ausgabe erzeugten Spalten repräsentieren jeweils den Symbolwert, den Symboltyp und den Symbolnamen. Es gibt verschiedene Arten von Symbolen - um die vollständigen Details zu erfahren, besuchen Sie die Handbuchseite des nm-Befehls.

Q2. Wie können Dateinamen jedem Symbol in der Ausgabe vorangestellt werden?

Dies können Sie mit dem -A tun Befehlszeilenoption.

nm -A [obj-file]

Zum Beispiel:

nm -A apl

So können Sie sehen, dass der Dateiname am Anfang jeder Zeile hinzugefügt wurde.

Q3. Wie kann man nm dazu bringen, auch Debugger-Symbole anzuzeigen?

Damit nm auch Debugger-Symbole in der Ausgabe anzeigt, verwenden Sie das -a Befehlszeilenoption.

nm -a [obj-filename]

Zum Beispiel:

nm -a apl

Der obige Befehl zeigt alle Symbole an, einschließlich Nur-Debugger-Symbole, die normalerweise nicht aufgelistet sind.

Q4. Wie kann man nm dazu bringen, Low-Level-Symbolnamen zu decodieren?

Wenn Sie möchten, können Sie nm sogar zwingen, Symbolnamen auf niedriger Ebene in Namen auf Benutzerebene zu dekodieren. Dies können Sie mit der Befehlszeilenoption -C tun.

nm -C [obj-file]

Zum Beispiel:

nm -C apl

Hier ist, was die Manpage zu dieser Option zu sagen hat:

           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.

F5. Wie kann man nm dazu bringen, nur dynamische Symbole anzuzeigen?

Falls Sie möchten, dass nm anstelle der normalen Symbole nur dynamische Symbole anzeigt, verwenden Sie das -D Befehlszeilenoption.

nm -D [obj-file]

Zum Beispiel:

nm -D apl

Sie können also sehen, dass nm in der Ausgabe nur dynamische Symbole erzeugt hat.

Q6. Wie verwende ich verschiedene nm-Ausgabeformate?

Um verschiedene Ausgabeformate zu aktivieren, verwenden Sie die Befehlszeilenoption -f. Standardmäßig wird die Ausgabe im bsd-Format erzeugt, aber wenn Sie möchten, können Sie auch die Formate 'sysv' und 'posix' aktivieren.

nm -f [format] [obj-filename]

Zum Beispiel:

nm -f posix apl

Beobachten Sie jetzt die Formatänderung.

F7. Wie kann man nm dazu bringen, nur externe Symbole anzuzeigen?

Dies können Sie mit der Befehlszeilenoption -g erreichen.

nm -g [obj-file]

Zum Beispiel:

nm -g  apl

F8. Welche Sortieroptionen bietet nm?

Standardmäßig sind die Symbole alphabetisch sortiert. Wenn Sie möchten, können Sie sie jedoch mit dem -n numerisch nach ihren Adressen sortieren Befehlszeilenoption.

nm -n [objfile]

Zum Beispiel:

nm -n apl

Sie können also sehen, dass die Ausgabe jetzt nach Adressen sortiert ist.

Falls Sie nicht möchten, dass nm irgendeine Art von Sortierung anwendet (einschließlich der standardmäßig verwendeten), verwenden Sie die Befehlszeilenoption -p. Fahren Sie fort und verwenden Sie die Befehlszeilenoption -r, um eine vorhandene Sortierung umzukehren.

Q9. Wie kann man nm dazu bringen, nur undefinierte Symbole anzuzeigen?

Dies können Sie mit dem -u tun Befehlszeilenoption.

nm -u [obj-file]

Zum Beispiel:

nm -u apl

F10. Wie kann man nm dazu bringen, nur definierte Symbole anzuzeigen?

Damit nm nur definierte Symbole anzeigt, verwenden Sie --defined-only Befehlszeilenoption.

nm --defined-only [obj-file]

Zum Beispiel:

nm --defined-only apl

Schlussfolgerung

Zugegeben, der nm-Befehl hat ein Nischenpublikum, aber meine persönliche Erfahrung sagt, auch wenn Sie sich nicht als Teil dieses Publikums betrachten, denken Sie daran, dass ein solches Tool existiert. Und für diejenigen, die dieses Dienstprogramm verwenden möchten, gehen Sie nach dem Üben aller Beispiele hier zur nm-Manpage, um mehr zu erfahren.


Linux
  1. Linux-CD-Befehls-Tutorial für Anfänger (8 Beispiele)

  2. Linux-Kommando-Tutorial für Anfänger (5 Beispiele)

  3. Linux-df-Befehls-Tutorial für Anfänger (8 Beispiele)

  4. Linux Date Command Tutorial für Anfänger (8 Beispiele)

  5. Linux-Hostname-Befehls-Tutorial für Anfänger (5 Beispiele)

Linux Who Command Tutorial für Anfänger (8 Beispiele)

Linux nl Command Tutorial für Anfänger (7 Beispiele)

Linux lscpu Command Tutorial für Anfänger (5 Beispiele)

Linux OD Command Tutorial für Anfänger (6 Beispiele)

Linux w Command Tutorial für Anfänger (5 Beispiele)

Linux ss Command Tutorial für Anfänger (8 Beispiele)