Finden Sie Bibliotheken, mit denen eine Binärdatei verknüpft wurde

40

Ich weiß, dass es einen Befehl gibt, der mir die Bibliotheken und die entsprechenden Versionen auflistet, mit denen eine Software verknüpft wurde.

Etwas mit ld oder libtool?

Aber ich kann mich einfach nicht erinnern. Ich habe einige Zeit mit Google verbracht, aber nichts Nützliches gefunden.

Ein Update
ldd <binary> unter Linux ( von @ Ernelli ) würde helfen, während ich herausfand, dass otool -L <binary>dies unter MacOS X etwas Ähnliches bewirkt.

er4z0r
quelle

Antworten:

41

Probieren Sie ldd binary-exec aus

Beispiel:

~$ 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
quelle
Mist! Mein erster Versuch war also richtig. Ich muss es nur auf meinem Mac installieren, damit es den Befehl genau kennt
;-)
@ er4z0r: Zu Ihrer Information, Mac OS ist BSD, nicht Linux .
Grawity
6
grwaity: du hast recht. Während ldd unter Linux helfen würde, stellte ich fest, dass 'otool -L <binary>' etwas Ähnliches bewirkt.
er4z0r
15

So finden Sie direkt, was es braucht:

readelf -d APP | grep NEEDED

lddWie an anderer Stelle erwähnt, werden alle direkten und indirekten Bibliotheken angezeigt - alles, was es zur Laufzeit benötigt. Dies ist möglicherweise keine vollständige Liste, da Sie möglicherweise Dinge mit dlopen () dynamisch öffnen, dies sollte jedoch in 99% der Fälle funktionieren.

ld und libtool werden beim Kompilieren / Verknüpfen verwendet. Sie sind nicht nützlich, wenn Sie eine App haben.

BEARBEITEN Ich kann anhand späterer Antworten sehen, die Sie zu OSX gefragt haben, aber ich möchte meiner Antwort zu Linux-Tools hinzufügen:

Eines habe ich vor einiger Zeit vergessen zu erwähnen; Sie fragten nach Versionen. Weder wird lddnoch readelfdie Frage "welche Version" beantworten. Sie werden Ihnen den Dateinamen der Bibliothek mitteilen, nach der Sie suchen, und die Namenskonvention enthält möglicherweise einige Versionsinformationen, aber nichts erzwingt dies. Symbole können versioniert sein, und Sie müssten zu viel über noch niedrigere Ebene mit nm, um diese zu sehen,

Reiche Homolka
quelle
9

Ein anderer Weg wäre, objdump zu verwenden.

objdump -x "binary" | grep BRAUCHTE

Dies zeigt alle benötigten Abhängigkeiten nur für diese Binärdatei an. Sehr hilfreich.

Pranav
quelle