Znajdź biblioteki, z którymi połączono plik binarny

40

Wiem, że istnieje polecenie, które wyświetla mi biblioteki i odpowiednie wersje, z którymi połączono oprogramowanie.

Coś z ld lub libtool?

Ale ja po prostu nie pamiętam. Spędziłem trochę czasu w Google, ale nic nie wymyśliłem.

Aktualizacja
ldd <binary> pomogłaby na Linuksie ( z @ Ernelli ), podczas gdy znalazłem, że otool -L <binary>działa podobnie w MacOS X.

er4z0r
źródło
stackoverflow.com/questions/50159/…
Ciro Santilli 中心 改造 六四 996ICU 六四 事件

Odpowiedzi:

40

Wypróbuj ldd binary-exec

Przykład:

~$ 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
źródło
Dang! Więc moja pierwsza próba była słuszna. Wystarczy zainstalować go na moim komputerze Mac, aby dokładnie rozpoznał polecenie ;-)
er4z0r 30.01.11
@ er4z0r: FYI, Mac OS to BSD, a nie Linux .
grawity
6
grwaity: masz rację. Podczas gdy ldd pomógłby na Linuksie, odkryłem, że 'otool -L <binarny>' robi coś podobnego.
er4z0r 30.01.11
14

Aby znaleźć to, czego potrzebuje bezpośrednio:

readelf -d APP | grep NEEDED

lddjak wspomniano w innym miejscu, pokaże wszystkie bezpośrednie i pośrednie biblioteki lib - wszystko, czego potrzebuje w czasie wykonywania. To może nie być pełna lista, ponieważ możesz dynamicznie otwierać rzeczy za pomocą dlopen (), ale powinno to działać w 99% przypadków.

ld i libtool są używane w czasie kompilacji / linku. Nie są przydatne, gdy masz aplikację.

EDYCJA Widzę późniejsze pytania, które pytałeś o OSX, ale chcę dodać do mojej odpowiedzi na narzędzia Linux:

Jednej rzeczy zapomniałem wspomnieć, jakiś czas temu; zapytałeś o wersje. Ani lddteż readelfnie odpowiemy na pytanie „jaka wersja”. Podadzą nazwę pliku, którego szukasz, a konwencja nazewnictwa może zawierać informacje o wersji, ale nic tego nie wymusza. Symbole mogą być wersjonowane, a żeby je zobaczyć, musiałbyś o wiele mniej wiedzieć nm,

Rich Homolka
źródło
9

Innym sposobem byłoby użycie objdump.

objdump -x "binary" | POTRZEBUJESZ grep

Pokazuje wszystkie potrzebne zależności tylko dla tego pliku binarnego. Bardzo przydatne.

Pranaw
źródło