Linux nm Befehl für Anfänger (10 Beispiele)

Wenn Sie ein Linux-Anwender sind, der sich auch mit der Softwareentwicklung auf Systemebene beschäftigt, befinden Sie sich möglicherweise in Situationen, in denen Sie Informationen zu Symbolen in einer Objektdatei benötigen. Sie werden sich freuen zu erfahren, dass es ein Befehlszeilenprogramm – genannt nm – gibt, das Sie in diesen Situationen verwenden können.

In diesem Tutorial werden wir die Grundlagen dieses Tools anhand einiger leicht verständlicher Beispiele diskutieren. 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 Befehlszeilenprogramm nm listet im Wesentlichen Symbole aus Objektdateien auf. Hier ist die Syntax des Tools:

nm [OPTIONS] OBJECT-FILENAME

Und so erklärt es die Manualseite des Befehls:

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

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 zu übergeben. Zum Beispiel habe ich den Befehl nm mit der Binärdatei ‚apl‘ verwendet:

nm apl

Der folgende Screenshot zeigt die Art der Ausgabe des obigen Befehls:

Die drei in der Ausgabe erzeugten Spalten stellen den Symbolwert, den Symboltyp und den Symbolnamen dar. Es gibt mehrere Arten von Symbolen – um die vollständigen Details zu erfahren, gehen Sie zur Man Page nm command.

Q2. Wie kann man Dateinamen vor jedem Symbol in der Ausgabe einfügen?

Dies kannst du mit der Kommandozeilenoption -A tun.

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 auch nm Display Debugger Symbole erstellen?

Um nm-Display-Debuggersymbole auch in der Ausgabe zu verwenden, verwenden Sie die Befehlszeilenoption -a.

nm -a [obj-filename]

Zum Beispiel:

nm -a apl

Der obige Befehl zeigt alle Symbole an, einschließlich der Symbole, die normalerweise nicht aufgelistet sind, die nur für den Debugger bestimmt sind.

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

Wenn Sie möchten, können Sie nm sogar zwingen, Low-Level-Symbolnamen in User-Level-Namen zu dekodieren. Dies kannst du mit der Kommandozeilenoption -C tun.

nm -C [obj-file]

Zum Beispiel:

nm -C apl

Hier ist, was die Man Page über diese 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.

Q5. Wie kann man erreichen, dass nm nur dynamische Symbole anzeigt?

Wenn Sie möchten, dass nm nur dynamische Symbole und nicht die normalen Symbole anzeigt, verwenden Sie die Befehlszeilenoption -D.

nm -D [obj-file]

Zum Beispiel:

nm -D apl

Man sieht also, dass nm nur dynamische Symbole in der Ausgabe erzeugt hat.

Q6. Wie kann man verschiedene nm-Ausgabeformate verwenden?

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.

Q7. Wie kann man erreichen, dass nm nur externe Symbole anzeigt?

Dies kannst du mit der Kommandozeilenoption -g erreichen.

nm -g [obj-file]

Zum Beispiel:

nm -g  apl

Q8. Welche Sortieroptionen bietet nm?

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

nm -n [objfile]

Zum Beispiel:

nm -n apl

So können Sie 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. Weiter geht es, um eine bestehende Sortierung rückgängig zu machen, verwenden Sie die Befehlszeilenoption -r.

Q9. Wie kann man erreichen, dass nm nur undefinierte Symbole anzeigt?

Dies kannst du mit der Kommandozeilenoption -u tun.

nm -u [obj-file]

Zum Beispiel:

nm -u apl

Q10. Wie kann man erreichen, dass nm nur definierte Symbole anzeigt?

Um zu erreichen, dass nur nm definierte Symbole anzeigt, verwenden Sie die Befehlszeilenoption –defined-only.

nm --defined-only [obj-file]

Zum Beispiel:

nm --defined-only apl

Fazit

Einverstanden, der nm-Befehl hat ein Nischenpublikum, aber meine persönliche Erfahrung sagt, selbst wenn man sich nicht als Teil dieses Publikums betrachtet, sollte man bedenken, dass ein solches Werkzeug existiert. Und für diejenigen, die dieses Dienstprogramm verwenden wollen, nachdem sie alle Beispiele hier geübt haben, gehen Sie zur Man Page nm, um mehr zu erfahren.

Das könnte dich auch interessieren …