Wie kann ich die direkten Abhängigkeiten von gemeinsam genutzten Objekten einer Linux-Binärdatei im ELF-Format leicht herausfinden?
Ich kenne das ldd-Tool, aber es scheint alle Abhängigkeiten einer Binärdatei auszugeben, einschließlich der Abhängigkeiten aller gemeinsam genutzten Objekte, von denen die Binärdatei abhängig ist.
Antworten:
Sie können
readelf
die ELF-Header untersuchen.readelf -d
listet die direkten Abhängigkeiten alsNEEDED
Abschnitte auf.quelle
Wenn Sie Abhängigkeiten rekursiv suchen möchten (einschließlich Abhängigkeiten von Abhängigkeiten, Abhängigkeiten von Abhängigkeiten von Abhängigkeiten usw.)…
Sie können den
ldd
Befehl verwenden. ldd - Abhängigkeiten der gemeinsam genutzten Bibliothek druckenquelle
Das
objdump
Tool kann Ihnen diese Informationen mitteilen. Wenn Sieobjdump
mit dem aufrufen-x
Option , damit alle Header ausgegeben werden, finden Sie die Abhängigkeiten der gemeinsam genutzten Objekte gleich zu Beginn im "Dynamischen Abschnitt".Wenn Sie beispielsweise
objdump -x /usr/lib/libXpm.so.4
auf meinem System ausgeführt werden, erhalten Sie im Abschnitt "Dynamisch" die folgenden Informationen:Die direkten Abhängigkeiten von gemeinsam genutzten Objekten werden als 'NEEDED'-Werte aufgeführt. Also im obigen Beispiel
libXpm.so.4
braucht mein System nurlibX11.so.6
undlibc.so.6
.Es ist wichtig zu beachten, dass dies nicht bedeutet, dass alle Symbole, die für die Übergabe der Binärdatei benötigt
objdump
werden, in den Bibliotheken vorhanden sind, sondern zumindest, welche Bibliotheken der Loader beim Laden der Binärdatei zu laden versucht.quelle
ldd -v druckt den Abhängigkeitsbaum im Abschnitt "Versionsinformationen:". Der erste Block in diesem Abschnitt sind die direkten Abhängigkeiten der Binärdatei.
Siehe Hierarchisches ldd (1)
quelle
objdump -x <binary> | grep "NEEDED"
? Ich meine, beide sind fast genau gleich, ich bekomme nur eine.so
Datei mehrldd
alsobjdump
. Die Tatsache, dass die Ergebnisse nicht dieselben sind, lässt mich fragen, welche Methode genauer ist.