Suchen Sie nach Bibliotheken, mit denen eine Binärdatei verknüpft war

Suchen Sie nach Bibliotheken, mit denen eine Binärdatei verknüpft war

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

Etwas mit ld oder libtool?

Aber ich kann mich einfach nicht erinnern. Habe einige Zeit bei Google verbracht, aber nichts Nützliches gefunden.

Aktualisieren
ldd <binary>würde unter Linux helfen, (aus@Ernelli), während ich herausgefunden habe, dass es otool -L <binary>unter MacOS X etwas Ähnliches tut.

Antwort1

Versuchen Sie lddbinär-exe

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)

Antwort2

So finden Sie heraus, was Sie direkt benötigen:

readelf -d APP | grep NEEDED

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

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

BEARBEITENIch erkenne an späteren Antworten, dass Sie nach OSX gefragt haben, möchte aber meiner Antwort zu Linux-Tools Folgendes hinzufügen:

Eine Sache habe ich vor einiger Zeit vergessen zu erwähnen: Sie haben nach Versionen gefragt. Weder lddnoch readelfwerden die Frage „Welche Version“ beantworten. Sie werden Ihnen den Dateinamen der Bibliothek nennen, 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 noch tiefere Ebenen kennen, um diese zu nmsehen.

Antwort3

Eine andere Möglichkeit wäre, objdump zu verwenden.

objdump -x "binär" | grep BENÖTIGT

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

Antwort4

DerAndere Antworteinen wichtigen Punkt übersehen:

Gemeinsam genutzte Bibliotheken können entwederdirektverknüpft oderindirektüber eine andere Bibliothek verknüpft.

Nur für diedirekt verlinkt:

objdump --private-headers "${bin}" | grep 'NÖTIG' | cut --delimiter=' ' --fields=18-

Füralle:

ldd "${bin}" | ausschneiden --fields=2 | ausschneiden --delimiter=' ' --fields=1 | rev | ausschneiden --delimiter='/' --fields=1 | rev | sortieren --unique --version-sort

verwandte Informationen