Linux 哪些库出现在/proc/$PID/pmaps中?
在Linux上,您可以检查/proc/$PID/pmaps以查看特定程序加载的库,并且程序可以打开/proc/self/pmaps以检查它自己加载的库 我知道pmap只包含动态库,显然内核无法预测我们以后可能会打开哪些库,所以我希望这些库不会包含在/proc/self/maps中。但我不确定还有其他几种情况:Linux 哪些库出现在/proc/$PID/pmaps中?,linux,linker,dynamic-linking,dynamic-library,procfs,Linux,Linker,Dynamic Linking,Dynamic Library,Procfs,在Linux上,您可以检查/proc/$PID/pmaps以查看特定程序加载的库,并且程序可以打开/proc/self/pmaps以检查它自己加载的库 我知道pmap只包含动态库,显然内核无法预测我们以后可能会打开哪些库,所以我希望这些库不会包含在/proc/self/maps中。但我不确定还有其他几种情况: 是否包含在构建时已链接但我们尚未在中调用任何函数的库?我的理解是Linux会延迟链接符号,直到它们第一次被使用,所以我不确定它们是否会出现 PMAP是否包含递归使用的所有库?例如,如果我查
/proc/$pid/maps不仅将列出已加载的库,还将列出所有其他映射内存段 阅读此帖子和其中的文章:
/proc/$pid/maps不仅将列出已加载的库,还将列出所有其他映射内存段 阅读此帖子和其中的文章: 是否包含在构建时已链接但我们尚未在中调用任何函数的库 是:在程序开始运行之前,运行时加载器将
mmap
可执行文件直接依赖的每个库
您可以通过运行
readelf -d a.out | grep NEEDED
PMAP是否包含递归使用的所有库
是:如果直接依赖于自身的库依赖于其他库,则运行时加载程序也将mmap
递归依赖项
我的理解是Linux会延迟链接符号,直到第一次使用它们
对于函数符号,这是非常正确的,但是对于数据符号,这是错误的,因为数据符号不能被懒散地解析
此外,符号是否延迟解析取决于LD_BIND_NOW
环境变量,以及由-znow
链接器标志控制的可执行动态部分中的等效设置
但所有这些都不会改变mmap
pciture;如果在动态部分中有DT_NEEDED
项用于foo.so
,则foo.so
将被mmap
ed(并在/proc/self/*map*
中显示),与延迟或非延迟解析无关
是否包含在构建时已链接但我们尚未在中调用任何函数的库
是:在程序开始运行之前,运行时加载器将mmap
可执行文件直接依赖的每个库
您可以通过运行
readelf -d a.out | grep NEEDED
PMAP是否包含递归使用的所有库
是:如果直接依赖于自身的库依赖于其他库,则运行时加载程序也将mmap
递归依赖项
我的理解是Linux会延迟链接符号,直到第一次使用它们
对于函数符号,这是非常正确的,但是对于数据符号,这是错误的,因为数据符号不能被懒散地解析
此外,符号是否延迟解析取决于LD_BIND_NOW
环境变量,以及由-znow
链接器标志控制的可执行动态部分中的等效设置
但所有这些都不会改变mmap
pciture;如果在动态部分中有DT_NEEDED
项用于foo.so
,则foo.so
将被mmap
ed(并在/proc/self/*map*
中显示),与延迟或非延迟解析无关