Mengapa nm tidak menunjukkan simbol untuk /lib/i386-linux-gnu/libc.so.6?

31

Saya berharap untuk melihat jumlah simbol dalam file libc.so.6 termasuk printf . Saya menggunakan alat nm untuk menemukan mereka, namun dikatakan tidak ada simbol di libc.so.6.

masec
sumber

Jawaban:

54

Mungkin simbol-simbol regulernya dilucuti dan yang tersisa adalah simbol dinamisnya, yang bisa Anda dapatkan nm -D.

PSkocik
sumber
11

@PSkocik menjawab ini. Saya hanya ingin menambahkan lebih detail. Ada dua jenis bagian simbol di ELF: .symtabdan .dynsym(lihat Spesifikasi Inti Basis Standar Linux, alias LSB_5.0.0 , untuk detailnya). .symtabadalah untuk menghubungkan langkah lib bersama itu sendiri. Setelah tautan selesai, .symtabbagian itu tidak diperlukan lagi. The .dynsymbagian berisi simbol-simbol penting yang seharusnya dicari oleh linker dinamis pada saat dijalankan. nmsecara default hanya membuang simbol di .symtabbagian ini.

LSB_5.0.0 Bagian 10.2.2.1, “Jenis Bagian ELF”, mengatakan lib bersama yang sesuai harus memiliki salah satu .symtabatau .dynsymkeduanya. Sebagai bagian dari perpustakaan ABI, libc dilucuti dari yang .symtabakan sesuai spesifikasi.

kula85
sumber
0

Cari tahu apakah itu objek bersama, atau, file ASCII biasa. Jika itu adalah objek bersama Anda akan melihat "ELF 32-bit LSB shared object,"

file /lib/i386-linux-gnu/libc.so.6
jncc99
sumber
libc.so.6jelas merupakan objek bersama.
Gilles 'SANGAT berhenti menjadi jahat'
Saya tidak pernah berasumsi dalam lingkungan Linux. Mempertimbangkan seseorang bisa menyentuh direktori root. Ya, dengan nama itu jelas merupakan objek berbagi. Dan, tidak ada salahnya untuk memverifikasi; ketika Anda tidak mendapatkan output yang diharapkan.
jncc99