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?

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>

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.


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.


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.


Mengapa Anda ingin pengguna mencobanya? Harap edit jawaban Anda untuk pemahaman yang lebih baik.
CaldeiraG
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.