Nm

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

nm - Visa symboltabellen för objektfiler

Kommandot `nm` används för att visa symboltabellen för objektfiler, vilket är användbart för att inspektera innehållet i binära filer.

Syntax

nm [ALTERNATIV] [FIL]...

Beskrivning

Kommandot `nm` listar symbolerna från objektfiler. En symboltabell innehåller information om funktioner och variabler i en binär fil, såsom deras namn, adresser och typer.

Alternativ

Kommandot `nm` stöder flera alternativ som kan användas för att justera dess beteende:

  • -a, --debug-syms - Visa alla symboler, inklusive debugger symboler.
  • -A, --print-file-name - Visa filnamnet för varje symbol.
  • -B - Samma som --format=bsd.
  • -C, --demangle - Demangla namn för att visa läsbara C++ symboler.
  • -D, --dynamic - Visa endast dynamiska symboler.
  • -f, --format=FORMAT - Ange visningsformatet (bsd, sysv, posix).
  • -g, --extern-only - Visa endast externa symboler.
  • -j, --just-symbol-name - Visa endast symbolnamnet.
  • -l, --line-numbers - Visa radnummer för symboler.
  • -n, --numeric-sort - Sortera symbolerna numeriskt efter deras adresser.
  • -o - Visa symbolernas adresser i oktalt format.
  • -p, --no-sort - Sortera inte symbolerna.
  • -P, --portability - Samma som --format=posix.
  • -r, --reverse-sort - Sortera symbolerna i omvänd ordning.
  • -S - Visa symbolernas storlek.
  • -s, --print-armap - Visa arkivindex.
  • -t, --radix=NUMBER - Använd NUMBER-bassystem (8, 10, 16) för att visa symboladresser.
  • -u, --undefined-only - Visa endast odefinierade symboler.
  • -U, --defined-only - Visa endast definierade symboler.
  • -V, --version - Visa versionsinformation och avsluta.
  • -X 32_64 - Använd både 32-bitars och 64-bitars symboler.
  • --help - Visa hjälpmeddelande och avsluta.

Exempel

Här är några praktiska exempel som visar hur du kan använda `nm`-kommandot:

  • För att visa alla symboler i en objektfil:

nm fil.o

  • För att visa alla symboler, inklusive debugger symboler:

nm -a fil.o

  • För att visa symbolernas adresser i oktalt format:

nm -o fil.o

  • För att visa endast externa symboler:

nm -g fil.o

  • För att demangla C++ symboler:

nm -C fil.o

  • För att visa radnummer för symboler:

nm -l fil.o

  • För att sortera symbolerna numeriskt efter deras adresser:

nm -n fil.o

Skillnader mellan macOS och Linux

Det finns några skillnader att tänka på när man använder `nm` på macOS jämfört med Linux:

  • Tillgänglighet: `nm`-kommandot är generellt sett tillgängligt på både macOS och Linux som en del av GNU Binutils-paketet på Linux och som en del av Xcode Developer Tools på macOS.
  • Alternativ: De flesta alternativ som finns på `nm` är tillgängliga på både macOS och Linux, men det rekommenderas att konsultera `man`-sidan på respektive plattform för att bekräfta tillgängliga alternativ och eventuella skillnader.

Exempel på att använda `nm` på macOS:

  • För att visa alla symboler i en objektfil:

nm fil.o

Exempel på att installera `nm` på macOS med Xcode Developer Tools:

  • Installera Xcode Developer Tools om det inte redan är installerat:

xcode-select --install

Det är alltid bra att konsultera `man`-sidan för `nm` på din specifika plattform för att se vilka alternativ och funktioner som är tillgängliga och hur de används.

Felsökning

Om du får ett felmeddelande när du använder `nm`, kontrollera följande:

  • Att du använder rätt syntax och alternativ för ditt specifika kommando.
  • Att objektfilen du försöker visa existerar och är tillgänglig.
  • Att du har nödvändiga behörigheter för att läsa objektfilen.

Se även

  • objdump - Visa detaljerad information om objektfiler.
  • readelf - Visa information om ELF-format objektfiler.
  • strip - Ta bort symboltabeller och andra delar från objektfiler.

Källor