一尘不染

如何检查给定进程在运行时加载了哪些共享库?

linux

有没有办法检查正在运行的进程在使用哪些库?

更具体地说,如果程序使用dlopen加载某些共享库,则readelf或ldd不会显示它。是否有可能从正在运行的进程中获取该信息?如果是,怎么办?


阅读 218

收藏
2020-06-02

共1个答案

一尘不染

其他人在正确的道路上。这有几种方法。

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

或者,使用strace:

strace CMD.... 2>&1 | grep -E '^open(at)?(.*\.so'

这两个都假定共享库的路径中的某个位置带有“
.so”,但是您可以对其进行修改。第一个给出了相当漂亮的输出,只是一个库列表,每行一个。第二个库将在打开库时继续列出库,这很好。

当然lsof

lsof -p NNNN | awk '{print $9}' | grep '\.so'
2020-06-02