Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
进程如何在Linux中找到动态共享库?_Linux_Process_Elf_Dynamic Loading - Fatal编程技术网

进程如何在Linux中找到动态共享库?

进程如何在Linux中找到动态共享库?,linux,process,elf,dynamic-loading,Linux,Process,Elf,Dynamic Loading,我正在阅读,看到以下内容: a.out中还存在多个段类型,其中包含符号表、调试信息、动态共享库的链接表等。这些附加部分不会作为进程执行的程序映像的一部分加载 但是,如果动态共享库的链接表没有加载到程序映像中,进程如何找到必要的 动态链接器通过链接期间添加到程序头中的.interp(PT_interp)部分作为程序解释器加载 动态链接器读取所需的DT_ELF标记(在静态链接期间添加),以确定需要解析哪些共享库 最后,在解析库dep时,从ld.so(8): 解析库依赖项时,动态链接器首先检查 查看每

我正在阅读,看到以下内容:

a.out中还存在多个段类型,其中包含符号表、调试信息、动态共享库的链接表等。这些附加部分不会作为进程执行的程序映像的一部分加载

但是,如果动态共享库的链接表没有加载到程序映像中,进程如何找到必要的

  • 动态链接器通过链接期间添加到程序头中的.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
    已加载