Warum zeigt nm keine Symbole für /lib/i386-linux-gnu/libc.so.6?

31

Ich habe erwartet, dass die libc.so.6- Datei die Anzahl der Symbole einschließlich printf enthält . Ich habe das nm- Tool verwendet, um sie zu finden, es heißt jedoch, dass in libc.so.6 kein Symbol vorhanden ist.

masec
quelle

Antworten:

54

Wahrscheinlich wurden die regulären Symbole entfernt, und es verbleiben die dynamischen Symbole, mit denen Sie arbeiten können nm -D.

PSkocik
quelle
11

@PSkocik hat das beantwortet. Ich möchte nur mehr Details hinzufügen. Es gibt zwei Arten von Symbolabschnitten in ELF: .symtabund .dynsym( Einzelheiten finden Sie in der Linux Standard Base Core-Spezifikation, auch bekannt als LSB_5.0.0 ). .symtabist für den Verknüpfungsschritt der gemeinsam genutzten Bibliothek selbst. Sobald die Verknüpfung abgeschlossen ist, wird der .symtabAbschnitt nicht mehr benötigt. Der .dynsymAbschnitt enthält wichtige Symbole, die vom dynamischen Linker zur Laufzeit durchsucht werden sollen. nmStandardmäßig werden nur die Symbole im .symtabAbschnitt ausgegeben .

LSB_5.0.0 Abschnitt 10.2.2.1, „ELF Abschnitt Typen“, sagen eine konforme gemeinsame lib entweder haben sollte .symtaboder .dynsymaber beide nicht. Als Teil der ABI-Bibliothek wird libc aus der zu spezifikationskonformen Bibliothek entfernt .symtab.

kula85
quelle
0

Finden Sie heraus, ob es sich um ein freigegebenes Objekt oder eine normale ASCII-Datei handelt. Wenn es sich um ein freigegebenes Objekt handelt, sollte "ELF 32-Bit LSB Shared Object" angezeigt werden.

file /lib/i386-linux-gnu/libc.so.6
jncc99
quelle
libc.so.6ist offensichtlich ein gemeinsames Objekt.
Gilles 'SO- hör auf böse zu sein'
Ich nehme nie an, in einer Linux-Umgebung. Angenommen, jemand hätte die Stammverzeichnisse berührt. Ja, beim Namen handelt es sich offensichtlich um ein Freigabeobjekt. Und es tut nicht weh, es zu überprüfen; wenn Sie nicht die erwartete Ausgabe erhalten.
jncc99