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

标签 c++ c linux shared-libraries

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

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

最佳答案

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

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'

关于c++ - 如何检查给定进程在运行时加载了哪些共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934274/

相关文章:

c++ - 如何搭建Caffe框架XCode 6.2、iOS 8.3环境

c - getdelim的使用

linux - 如何在 shell 脚本中预先提供对 pacaur 的 sudo 访问权限?

c++ - 我可以欺骗访问私有(private) C++ 类成员变量吗?

c++ - C++ 中的网络协议(protocol)对象序列化

c - Linux进程堆栈被局部变量溢出(堆栈保护)

c - C : using awk getting runaway string constant error 中的 shell 脚本

C++:帮助解决 Linux 和 Windows 之间的 cin 差异

c++ - x86-64 长 double

c - 如何在 IronPython 中访问宏