Je m'attendais à voir le nombre de symboles dans le fichier libc.so.6 , y compris printf . J'ai utilisé l' outil nm pour les trouver, mais il dit qu'il n'y a pas de symbole dans libc.so.6.
Je m'attendais à voir le nombre de symboles dans le fichier libc.so.6 , y compris printf . J'ai utilisé l' outil nm pour les trouver, mais il dit qu'il n'y a pas de symbole dans libc.so.6.
Il a probablement ses symboles réguliers supprimés et ce qui reste est ses symboles dynamiques, que vous pouvez obtenir avec nm -D
.
@PSkocik a répondu à cela. Je veux juste ajouter plus de détails. Il existe deux types de sections de symboles dans ELF: .symtab
et .dynsym
(voir la spécification Linux Standard Base Core, alias LSB_5.0.0 , pour plus de détails). .symtab
est pour l'étape de liaison de la bibliothèque partagée elle-même. Une fois la liaison terminée, la .symtab
section n'est plus nécessaire. La .dynsym
section contient des symboles importants qui sont censés être recherchés par l'éditeur de liens dynamiques au moment de l'exécution. nm
par défaut, ne vide que les symboles dans la .symtab
section.
LSB_5.0.0 Section 10.2.2.1, «Types de sections ELF», indique qu'une bibliothèque partagée conforme doit avoir les deux .symtab
ou .dynsym
pas les deux. Dans le cadre de la bibliothèque ABI, libc est supprimée de la .symtab
pour être conforme aux spécifications.
Découvrez s'il s'agit d'un objet partagé ou d'un fichier ASCII standard. S'il s'agit d'un objet partagé, vous devriez voir «Objet partagé LSF 32 bits ELF».
file /lib/i386-linux-gnu/libc.so.6
libc.so.6
est un objet partagé.