Comment puis-je trouver facilement les dépendances d'objets partagés directs d'un binaire Linux au format ELF?
Je connais l'outil ldd, mais cela semble générer toutes les dépendances d'un binaire, y compris les dépendances de tous les objets partagés dont le binaire dépend.
Réponses:
Vous pouvez utiliser
readelf
pour explorer les en-têtes ELF.readelf -d
listera les dépendances directes sous forme deNEEDED
sections.la source
Si vous souhaitez rechercher des dépendances de manière récursive (y compris les dépendances de dépendances, les dépendances de dépendances de dépendances, etc.)…
Vous pouvez utiliser la
ldd
commande. ldd - imprimer les dépendances de la bibliothèque partagéela source
L'
objdump
outil peut vous fournir ces informations. Si vous invoquezobjdump
avec le-x
option, pour obtenir la sortie de tous les en-têtes, vous trouverez les dépendances d'objets partagés dès le début dans la "Section dynamique".Par exemple, s'exécuter
objdump -x /usr/lib/libXpm.so.4
sur mon système donne les informations suivantes dans la "section dynamique":Les dépendances directes des objets partagés sont répertoriées comme des valeurs «NÉCESSAIRES». Donc, dans l'exemple ci-dessus,
libXpm.so.4
mon système a juste besoin delibX11.so.6
etlibc.so.6
.Il est important de noter que cela ne signifie pas que tous les symboles nécessaires à la transmission du binaire
objdump
seront présents dans les bibliothèques, mais cela montre au moins quelles bibliothèques le chargeur essaiera de charger lors du chargement du binaire.la source
ldd -v imprime l'arborescence des dépendances dans la section "Informations sur la version:". Le premier bloc de cette section correspond aux dépendances directes du binaire.
Voir Hiérarchique ldd (1)
la source
objdump -x <binary> | grep "NEEDED"
? Je veux dire, les deux sont presque exactement les mêmes, je reçois juste un.so
fichier de plus avecldd
queobjdump
. Mais le fait que les résultats ne soient pas les mêmes me fait me demander quelle méthode est la plus précise.