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.
quelle
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.
Wahrscheinlich wurden die regulären Symbole entfernt, und es verbleiben die dynamischen Symbole, mit denen Sie arbeiten können nm -D
.
@PSkocik hat das beantwortet. Ich möchte nur mehr Details hinzufügen. Es gibt zwei Arten von Symbolabschnitten in ELF: .symtab
und .dynsym
( Einzelheiten finden Sie in der Linux Standard Base Core-Spezifikation, auch bekannt als LSB_5.0.0 ). .symtab
ist für den Verknüpfungsschritt der gemeinsam genutzten Bibliothek selbst. Sobald die Verknüpfung abgeschlossen ist, wird der .symtab
Abschnitt nicht mehr benötigt. Der .dynsym
Abschnitt enthält wichtige Symbole, die vom dynamischen Linker zur Laufzeit durchsucht werden sollen. nm
Standardmäßig werden nur die Symbole im .symtab
Abschnitt ausgegeben .
LSB_5.0.0 Abschnitt 10.2.2.1, „ELF Abschnitt Typen“, sagen eine konforme gemeinsame lib entweder haben sollte .symtab
oder .dynsym
aber beide nicht. Als Teil der ABI-Bibliothek wird libc aus der zu spezifikationskonformen Bibliothek entfernt .symtab
.
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.6
ist offensichtlich ein gemeinsames Objekt.