Pourquoi nm ne montre aucun symbole pour /lib/i386-linux-gnu/libc.so.6?

31

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.

masec
la source

Réponses:

54

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
la source
11

@PSkocik a répondu à cela. Je veux juste ajouter plus de détails. Il existe deux types de sections de symboles dans ELF: .symtabet .dynsym(voir la spécification Linux Standard Base Core, alias LSB_5.0.0 , pour plus de détails). .symtabest pour l'étape de liaison de la bibliothèque partagée elle-même. Une fois la liaison terminée, la .symtabsection n'est plus nécessaire. La .dynsymsection contient des symboles importants qui sont censés être recherchés par l'éditeur de liens dynamiques au moment de l'exécution. nmpar défaut, ne vide que les symboles dans la .symtabsection.

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 .symtabou .dynsympas les deux. Dans le cadre de la bibliothèque ABI, libc est supprimée de la .symtabpour être conforme aux spécifications.

kula85
la source
0

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
jncc99
la source
libc.so.6est un objet partagé.
Gilles 'SO- arrête d'être méchant'
Je ne suppose jamais dans un environnement Linux. Considérant que quelqu'un aurait pu toucher les répertoires racine. Oui, par nom, c'est évidemment un objet partagé. Et, cela ne fait pas de mal de vérifier; lorsque vous n'obtenez pas la sortie attendue.
jncc99