在 Linux 上,您可以检查 /proc/$PID/pmaps 以查看特定程序加载的库,并且程序可以打开 /proc/self/pmaps 以检查它本身已加载的库。
我知道 pmaps 只会包含动态库,显然内核无法预测我们以后可能会打开哪些库,所以我希望这些库不包含在 /proc/self/maps 中。但我不确定其他一些情况:
是否包含在构建时已链接但我们尚未调用任何函数的库?我的理解是 Linux 会延迟链接符号,直到第一次使用它们,所以我不确定它们是否会出现。
pmaps 是否包含所有递归使用的库?例如,如果我查看 pmaps 中的每个库并在其上运行 ldd,然后在这些库上运行 ldd,令人作呕,我不应该找到任何不在原始 pmaps 中的新库?我在几个二进制文件上试过这个,看起来是这样,但也许我很幸运。