Làm thế nào để xem các đối tượng chia sẻ hiện đang được tải trong Linux?


34

Tôi có hai câu hỏi liên quan:

  • Làm cách nào để biết thư viện dùng chung hiện đang được tải? (tức là toàn hệ thống, quá trình bất khả tri)
  • Làm thế nào tôi có thể thấy tất cả các thư viện chia sẻ được tải bởi một quá trình?

Câu trả lời:


40

Bạn có thể làm cả hai với lsof. Để xem các quy trình có thư viện mở hoặc ánh xạ, hãy làm:

lsof /path/to/lib.so

và để xem những tập tin nào (bao gồm các thư viện dùng chung), một quy trình đã mở và / hoặc ánh xạ, hãy làm:

lsof -p <pid>

22

Một cách khác để xem những gì được tải trong một quy trình là bằng cách xem /proc/PID/mapstệp. Điều này cho thấy mọi thứ được ánh xạ vào không gian địa chỉ của bạn, bao gồm các đối tượng được chia sẻ được ánh xạ.


Hoạt động tốt trên nền tảng ARM nhúng của tôi. Trong khi triển khai BusyBox lsofkhông có chức năng cần thiết.
Alex Che

7
sudo grep libcairo.so /proc/*/maps

là một cách hay để khám phá tất cả /proc/PID/maps được đề cập bởi Rich cùng một lúc. Đầu ra mẫu:

/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

Hơn nữa awkvà bash-fu có thể tinh chỉnh đầu ra hơn nữa.

Phương pháp này cũng cho thấy các thư viện được mở bằng dlopen, được thử nghiệm với thiết lập tối thiểu này đã bị hack với sleep(1000)Ubuntu 18.04.


4

Bạn có thể chạy lệnh tiếp theo bằng root và xem danh sách đầy đủ,

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

Điều này là dành cho người dùng không có lsof.


Tại sao bạn muốn người dùng thử nó? Vui lòng chỉnh sửa câu trả lời của bạn để hiểu rõ hơn.
CaldeiraG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.