Übersicht
nm analysiert die Symboltabelle in Objektdateien und gibt den Namen, Typ, die Adresse und weitere Informationen jedes Symbols aus. Dies ist nützlich für die Diagnose von Linker-Problemen, die Überprüfung des Inhalts von Bibliotheken und die Analyse der Code-Optimierung.
Hauptfunktionen
- Ausgabe der Symbolliste von Objektdateien
- Identifizierung von Symboltypen (Funktion, Variable, definiert, undefiniert usw.)
- Bereitstellung von Symboladressen und Größeninformationen
- Unterstützung für das Demangling von C++-Namen
Wichtige Optionen
Der Befehl nm bietet verschiedene Optionen zum Filtern der Symbolliste und zur Steuerung des Ausgabeformats.
Symbolfilterung
Ausgabeformat
Erzeugter Befehl:
Kombinieren Sie die Befehle.
Beschreibung:
`nm` Führen Sie den Befehl aus.
Kombinieren Sie diese Optionen und führen Sie die Befehle virtuell zusammen mit der KI aus.
Anwendungsbeispiele
Hier sind verschiedene Möglichkeiten, Symbolinformationen aus Objektdateien mit dem Befehl nm zu überprüfen.
Grundlegende Symbolliste anzeigen
gcc -c main.c -o main.o
nm main.o
Gibt alle Symbole einer kompilierten ausführbaren Datei oder Objektdatei im Standardformat aus.
Nur undefinierte Symbole anzeigen
nm -u main.o
Nützlich zur Diagnose von Linker-Problemen, indem nur undefinierte Symbole wie nicht verknüpfte externe Funktionen oder Variablen ausgegeben werden.
C++-Symbole demangeln
g++ -c my_class.cpp -o my_class.o
nm -C my_class.o
Konvertiert komplexe Symbolnamen aus C++-Objektdateien in ein für Menschen lesbares Format.
Ausgabe mit Symbolgröße
nm -S main.o
Zeigt die Größe (in Bytes) jedes Symbols zusammen mit seiner Adresse an.
Tipps & Hinweise
Tipps und Hinweise zur effektiven Nutzung des Befehls nm.
Symboltyp-Zeichen
Die Zeichen neben jedem Symbol in der nm-Ausgabe geben den Symboltyp an. Großbuchstaben bedeuten globale Symbole, Kleinbuchstaben lokale Symbole.
- A: Absolutes Symbol
- B/b: Uninitialisierte Daten (BSS)
- D/d: Initialisierte Daten
- T/t: Text (Code)-Sektion
- U: Undefiniertes Symbol
- W/w: Schwaches Symbol (Weak)
Nutzung beim Debugging
nm ist sehr nützlich zur Diagnose von Linker-Fehlern oder zur Überprüfung, ob bestimmte Funktionen oder Variablen korrekt in einer Bibliothek enthalten sind. Insbesondere die Option -u hilft bei der Identifizierung undefinierter Referenzen zur Behebung von Linker-Problemen.