如何从C ++获取可执行的共享库列表?

时间:2011-10-25 15:37:25

标签: c++ posix shared-libraries ld procfs

我想以编程方式获取Linux和Solaris上由我的二进制文件链接的共享库列表。现在我发布了pmap(我不能在二进制文件上使用ldd因为它不包含dlopen'd库,我不能使用pldd,因为它只是Solaris):< / p>

std::ostringstream cmd;
cmd << "/usr/bin/pmap " << getpid() << " | awk '{ print $NF }' | grep '\\.so' | sort -u";
FILE* p = popen(cmd.str().c_str(), "r");

这有点hackish但它适用于Solaris和Linux(pmap输出略有不同,但所需信息始终位于最后一列)。有没有办法在没有炮轰的情况下获得相同的信息?这适用于两个平台?我假设/proc/$PID文件的格式不同,但我不知道帮助解析这些文件的标题通常位于何处(如果有共同的位置?)。

1 个答案:

答案 0 :(得分:2)

您可以使用pmap 1234命令,1234是进程ID。

从程序内部,更简单的方法(特定于Linux)是读取和解析/proc/self/maps文件。

尝试运行

  

cat /proc/self/maps

Linux下的

:它将显示运行上述cat命令的进程的内存映射。

如果你有一些精确的指针,你可以使用dladdr(一个GNU / Linux或Glibc特定函数)来获取有关哪个动态库包含它的信息。