进程如何在Linux中找到动态共享库?
我正在阅读,看到以下内容: a.out中还存在多个段类型,其中包含符号表、调试信息、动态共享库的链接表等。这些附加部分不会作为进程执行的程序映像的一部分加载 但是,如果动态共享库的链接表没有加载到程序映像中,进程如何找到必要的进程如何在Linux中找到动态共享库?,linux,process,elf,dynamic-loading,Linux,Process,Elf,Dynamic Loading,我正在阅读,看到以下内容: a.out中还存在多个段类型,其中包含符号表、调试信息、动态共享库的链接表等。这些附加部分不会作为进程执行的程序映像的一部分加载 但是,如果动态共享库的链接表没有加载到程序映像中,进程如何找到必要的 动态链接器通过链接期间添加到程序头中的.interp(PT_interp)部分作为程序解释器加载 动态链接器读取所需的DT_ELF标记(在静态链接期间添加),以确定需要解析哪些共享库 最后,在解析库dep时,从ld.so(8): 解析库依赖项时,动态链接器首先检查 查看每
动态链接器通过链接期间添加到程序头中的.interp(PT_interp
)部分作为程序解释器加载
动态链接器读取所需的DT_
ELF标记(在静态链接期间添加),以确定需要解析哪些共享库
最后,在解析库dep时,从ld.so(8)
:
解析库依赖项时,动态链接器首先检查
查看每个依赖项字符串是否包含斜杠(可能发生这种情况)
如果在链接时指定了包含斜杠的库路径名)。
如果找到斜杠,则依赖项字符串将解释为
(相对或绝对)路径名,并使用该路径名加载库
路径名
如果库依赖项不包含斜杠,则会对其进行搜索
按以下顺序进行:
- (仅限ELF)使用DT_RPATH动态目录中指定的目录
二进制文件的section属性(如果存在)和DT_运行路径属性
不存在。不推荐使用DT_RPATH
- 使用环境变量LD_LIBRARY_PATH。除非
可执行文件是一个集合用户ID/集合组ID二进制文件,在这种情况下是
忽略
- (仅限ELF)使用DT_运行路径中指定的目录
二进制文件的section属性(如果存在)
- 来自缓存文件/etc/ld.so.cache,其中包含一个已编译列表
以前在扩充库路径中找到的候选库的数目。
但是,如果二进制文件与-z nodeflib链接器选项链接,
将跳过默认库路径中的库。图书馆
最好安装在硬件功能目录(见下文)中
到其他图书馆
- 在默认路径/lib中,然后是/usr/lib。如果二进制文件被链接
使用-z nodeflib链接器选项,将跳过此步骤
你是说.get.plt
部分吗?如果不是,你在谈论什么部分(我理解objdump-h
显示了它们)?出于好奇,我做了一个测试。我运行了一个程序,然后附加了gdb
。然后我执行了这个gdb
命令:维护信息节ALLOBJ
。我看到我的可执行文件的.get.plt
已加载