Bagaimana cara melihat objek bersama yang saat ini dimuat di Linux?

34

Saya punya dua pertanyaan terkait:

  • Bagaimana saya bisa melihat jika perpustakaan bersama saat ini dimuat? (yaitu seluruh sistem, proses agnostik)
  • Bagaimana saya bisa melihat semua perpustakaan bersama dimuat oleh suatu proses?
Maks
sumber

Jawaban:

40

Anda dapat melakukan keduanya dengan lsof. Untuk melihat proses apa yang telah dibuka atau dipetakan perpustakaan:

lsof /path/to/lib.so

dan untuk melihat file apa (termasuk pustaka bersama) suatu proses telah terbuka dan / atau dipetakan, lakukan:

lsof -p <pid>
TomH
sumber
22

Cara lain untuk melihat apa yang dimuat dalam suatu proses adalah dengan melihat /proc/PID/mapsfile. Ini menunjukkan semua yang dipetakan ke dalam ruang alamat Anda, termasuk objek bersama yang dipetakan.

Homolka yang kaya
sumber
Bekerja dengan baik pada platform ARM tertanam saya. Sedangkan implementasi BusyBox lsoftidak memiliki fungsionalitas yang dibutuhkan.
Alex Che
7
sudo grep libcairo.so /proc/*/maps

adalah cara yang bagus untuk menjelajahi semua yang /proc/PID/maps disebutkan oleh Rich sekaligus. Output sampel:

/proc/8390/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6

Selanjutnya awkdan bash-fu dapat memperbaiki output lebih lanjut.

Metode ini juga menunjukkan perpustakaan dibuka dengan dlopen, diuji dengan pengaturan minimal ini diretas dengan sleep(1000)Ubuntu 18.04.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
4

Anda dapat menjalankan perintah berikutnya dengan root dan melihat daftar lengkap,

cat /proc/*/maps | awk '{print $6;}' | grep '\.so' | sort | uniq

Ini untuk pengguna yang tidak memiliki lsof.

Nobutarou
sumber
Mengapa Anda ingin pengguna mencobanya? Harap edit jawaban Anda untuk pemahaman yang lebih baik.
CaldeiraG