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

Jos*_*vin 5 c++ posix shared-libraries ld procfs

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

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

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

Bas*_*tch 2

您可以将pmap 1234命令与1234进程 ID 一起使用。

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

尝试跑步

cat /proc/self/maps

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

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