Bagaimana saya bisa dengan mudah mengetahui dependensi objek bersama langsung dari biner Linux dalam format ELF?
Saya mengetahui alat ldd, tetapi yang muncul untuk menampilkan semua dependensi dari biner, termasuk dependensi dari setiap objek bersama yang bergantung pada biner.
Jawaban:
Anda dapat menggunakan
readelf
untuk menjelajahi header ELF.readelf -d
akan mencantumkan dependensi langsung sebagaiNEEDED
bagian.sumber
Jika Anda ingin menemukan dependensi secara rekursif (termasuk dependensi dependensi, dependensi dependensi dependensi, dan sebagainya) ...
Anda dapat menggunakan
ldd
perintah. ldd - mencetak dependensi pustaka bersamasumber
The
objdump
alat dapat memberitahu Anda informasi ini. Jika Anda memohonobjdump
dengan-x
opsi, untuk membuatnya mengeluarkan semua tajuk maka Anda akan menemukan dependensi objek bersama tepat di awal di "Bagian Dinamis".Misalnya berjalan
objdump -x /usr/lib/libXpm.so.4
di sistem saya memberikan informasi berikut di "Bagian Dinamis":Ketergantungan objek yang dibagikan langsung terdaftar sebagai nilai 'DIPERLUKAN'. Jadi pada contoh di atas,
libXpm.so.4
pada sistem saya hanya perlulibX11.so.6
danlibc.so.6
.Penting untuk dicatat bahwa ini tidak berarti bahwa semua simbol yang diperlukan oleh biner yang dilewati
objdump
akan ada di perpustakaan, tetapi setidaknya menunjukkan perpustakaan apa yang akan dicoba dimuat oleh loader ketika memuat biner.sumber
ldd -v mencetak pohon dependensi di bawah bagian "Informasi Versi: '. Blok pertama di bagian itu adalah dependensi langsung dari biner.
Lihat Hierarchical ldd (1)
sumber
objdump -x <binary> | grep "NEEDED"
? Maksud saya, keduanya hampir persis sama, saya hanya mendapatkan satu.so
file lebih banyakldd
daripadaobjdump
. Tetapi kenyataannya hasilnya tidak sama membuat saya bertanya-tanya metode mana yang lebih akurat.