Trouver des bibliothèques auxquelles un binaire était lié

40

Je sais qu'il existe une commande qui répertorie les bibliothèques et les versions respectives auxquelles un logiciel était lié.

Quelque chose avec ld ou libtool?

Mais je ne m'en souviens pas. J'ai passé du temps sur Google mais je n'ai rien trouvé d'utile.

La mise à jour
ldd <binary> aiderait Linux, ( de @ Ernelli ) alors que je trouvais que otool -L <binary>cela faisait quelque chose de similaire sur MacOS X.

er4z0r
la source
stackoverflow.com/questions/50159/…
Ciro Santilli a annoncé le

Réponses:

42

Essayez ldd binary-exec

Exemple:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)
Ernelli
la source
Dang! Donc, mon premier essai était juste. Il suffit juste de l'installer sur mon Mac pour qu'il connaisse la commande ;-)
er4z0r
@ er4z0r: Pour votre information, Mac OS est BSD, pas Linux .
Grawity
6
grwaity: vous avez raison. Bien que ldd puisse aider sur Linux, j'ai trouvé que 'otool -L <binary>' avait un effet similaire.
er4z0r
15

Pour trouver ce dont il a directement besoin:

readelf -d APP | grep NEEDED

lddcomme mentionné ailleurs, affichera toutes les bibliothèques directes et indirectes - tout ce dont il a besoin au moment de l'exécution. Cela peut ne pas être une liste complète, puisque vous pouvez ouvrir dynamiquement des choses avec dlopen (), mais cela devrait fonctionner 99% du temps.

ld et libtool sont utilisés au moment de la compilation / du lien. Ils ne sont pas utiles une fois que vous avez une application.

EDIT Je peux voir plus tard que vous avez posé des questions sur OSX, mais je souhaite ajouter à ma réponse sur les outils Linux:

Une chose que j'ai oublié de mentionner, il y a longtemps. vous avez demandé des versions. Ni lddne readelfrépondra à la question « quelle version ». Ils vous indiqueront le nom de fichier de la bibliothèque que vous recherchez et la convention de dénomination peut contenir des informations sur la version, mais rien ne l’impose. Les symboles peuvent être versionnés, et vous devriez avoir beaucoup plus de niveaux inférieurs nmpour les voir,

Rich Homolka
la source
9

Une autre façon serait d'utiliser objdump.

objdump -x "binary" | GREP BESOIN

Cela montre toutes les dépendances nécessaires uniquement pour ce binaire. Très utile.

Pranav
la source