如何查看Linux中当前加载的共享对象?


34

我有两个相关的问题:

  • 如何查看共享库当前是否已加载?(即系统范围内,与过程无关)
  • 如何查看某个进程加载的所有共享库?

Answers:


40

您可以同时使用lsof。要查看打开或映射了库的进程,请执行以下操作:

lsof /path/to/lib.so

并查看进程已打开和/或映射了哪些文件(包括共享库),请执行以下操作:

lsof -p <pid>

22

查看进程中加载​​的另一种方法是查看/proc/PID/maps文件。这将显示映射到您的地址空间的所有内容,包括映射到其中的共享对象。


在我的嵌入式ARM平台上运行良好。虽然的BusyBox实现lsof没有所需的功能。
Alex Che

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

是一次浏览/proc/PID/maps Rich提到的所有内容的好方法。样本输出:

/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

而且awk,bash-fu可以进一步完善输出。

此方法还显示了通过打开的库dlopen,并通过在Ubuntu 18.04 上进行了破解的最小设置进行了测试sleep(1000)


4

您可以通过root用户运行下一个命令,并查看完整列表,

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

这适用于没有lsof的用户。


您为什么要用户尝试一下?请修改您的答案以更好地理解。
CaldeiraG
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.