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.

Antworten:


54

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


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.


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.