web-dev-qa-db-fra.com

Pourquoi nm ne montre aucun symbole pour /lib/i386-linux-gnu/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.

34
masec

Ses symboles réguliers ont probablement été supprimés et ce qui reste est ses symboles dynamiques, que vous pouvez obtenir avec nm -D.

59
PSkocik

@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 Linux Standard Base Core Specification, a.k.a. LSB_5.0. , for details). .symtab Est pour l'étape de liaison de la bibliothèque partagée elle-même. Une fois la liaison terminée, la section .symtab N'est plus nécessaire. La section .dynsym Contient des symboles importants qui sont censés être recherchés par l'éditeur de liens dynamique au moment de l'exécution. nm par défaut, ne vide que les symboles dans la section .symtab.

LSB_5.0. Section10.2.2.1, "Types de sections ELF", indique qu'une bibliothèque partagée conforme doit avoir soit .symtab Soit .dynsym Mais pas les deux. Dans le cadre de la bibliothèque ABI, libc est supprimée du .symtab Pour être conforme aux spécifications.

13
kula85

Découvrez s'il s'agit d'un objet partagé ou d'un fichier ASCII ordinaire. S'il s'agit d'un objet partagé, vous devriez voir "ELF 32-bit LSB shared object").

file /lib/i386-linux-gnu/libc.so.6
0
jncc99