Jak mogę łatwo znaleźć bezpośrednie zależności między obiektami współdzielonymi pliku binarnego systemu Linux w formacie ELF?
Wiem o narzędziu ldd, ale wydaje się, że wypisuje wszystkie zależności pliku binarnego, w tym zależności wszelkich obiektów współdzielonych, od których zależy plik binarny.
Odpowiedzi:
Możesz użyć
readelf
do eksploracji nagłówków ELF.readelf -d
wyświetli bezpośrednie zależności jakoNEEDED
sekcje.źródło
Jeśli chcesz znaleźć zależności rekurencyjnie (w tym zależności zależności, zależności zależności zależności itp.)…
Możesz użyć
ldd
polecenia. ldd - wyświetla zależności bibliotek współdzielonychźródło
objdump
Narzędzie może wam tę informację. Jeśli powołaćobjdump
z-x
opcji, aby zmusić go do wyjścia wszystkich nagłówków Pokochasz więc znaleźć wspólne zależności obiektów na samym początku, w sekcji „Dynamiczny”.Na przykład uruchomienie
objdump -x /usr/lib/libXpm.so.4
w moim systemie daje następujące informacje w sekcji „Dynamiczna sekcja”:Bezpośrednie zależności obiektów współdzielonych są wymienione jako wartości „POTRZEBNE”. W powyższym przykładzie
libXpm.so.4
w moim systemie wystarczylibX11.so.6
ilibc.so.6
.Należy zauważyć, że nie oznacza to, że wszystkie symbole wymagane przez przekazywany plik binarny
objdump
będą obecne w bibliotekach, ale przynajmniej pokazuje, jakie biblioteki program ładujący będzie próbował załadować podczas ładowania pliku binarnego.źródło
ldd -v wyświetla drzewo zależności w sekcji „Informacje o wersji:”. Pierwszy blok w tej sekcji to bezpośrednie zależności pliku binarnego.
Zobacz Hierarchical ldd (1)
źródło
objdump -x <binary> | grep "NEEDED"
? To znaczy, oba są prawie dokładnie takie same, po prostu otrzymuję jeden.so
plik więcej zldd
niżobjdump
. Ale fakt, że wyniki nie są takie same, sprawia, że zastanawiam się, która metoda jest dokładniejsza.