gpt4 book ai didi

linux -/proc/$PID/pmaps 中出现了哪些库?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:12 25 4
gpt4 key购买 nike

在 Linux 上,您可以检查/proc/$PID/pmaps 以查看特定程序加载的库,程序可以打开/proc/self/pmaps 以检查它自己加载的库。

我知道 pmaps 将只包含动态库,显然内核无法预测我们稍后可能会 dlopen 哪些库,所以我希望那些不包含在/proc/self/maps 中。但我不确定其他一些情况:

  1. 是否包含在构建时已链接但我们尚未调用任何函数的库?我的理解是 Linux 延迟链接符号,直到它们第一次被使用,所以我不确定它们是否会出现。

  2. pmaps 是否包含递归使用的所有库?例如。如果我查看 pmaps 中的每个库并在其上运行 ldd,然后在这些库上运行 ldd,令人作呕,我不应该找到原始 pmaps 中没有的任何新库吗?我在几个二进制文件上试过了,看起来是这样,但也许我走运了。

最佳答案

Are libraries that have been linked at build time but we haven't called any function in yet included?

是的:在您的程序开始运行之前,运行时加载器将mmap您的可执行文件直接依赖的每个库。

您可以通过运行找到此类库的列表

readelf -d a.out | grep NEEDED

Does pmaps contain all the libraries used recursively?

是的:如果您直接依赖于自身的库依赖于其他某个库,运行时加载器也会mmap递归依赖。

My understanding is the Linux delays linking symbols until the first time they are used

这对于函数 符号来说大部分是正确的,但对于不能延迟解析的数据符号来说是错误的。

此外,符号是否延迟解析取决于 LD_BIND_NOW 环境变量,以及可执行动态部分中的等效设置,由 -znow 链接器标志控制.

虽然这些都没有改变 mmap pciture;如果您的动态部分中有 foo.soDT_NEEDED 条目,则 foo.so mmaped(并将显示在 /proc/self/*map* 中)独立于惰性或非惰性分辨率。

关于linux -/proc/$PID/pmaps 中出现了哪些库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14782074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com