web-dev-qa-db-fra.com

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

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

Quelque chose avec ld ou libtool?

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

Mettre à jour
ldd <binary> aiderait sur Linux, ( de @ Ernelli ) alors que j’ai trouvé que otool -L <binary> fait quelque chose de similaire sur MacOS X.

39
er4z0r

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)
39
Ernelli

Pour trouver ce dont il a directement besoin:

readelf -d APP | grep NEEDED

ldd, comme mentionné ailleurs, montrera 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 par les réponses ultérieures que vous posiez 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 ldd ni readelf ne répondront à la question "quelle version". Ils vous indiqueront le nom du 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 avec nm pour les voir,

14
Rich Homolka

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.

8
Pranav