动态链接器是由操作系统自动调用还是由 ELF 文件中嵌入的代码自动调用?

动态链接器是由操作系统自动调用还是由 ELF 文件中嵌入的代码自动调用?

我不确定动态链接器/usr/bin/ld是在加载 ELF 文件时由操作系统自动调用,还是由 ELF 文件中嵌入的代码调用?

当我用来r2调试ELF文件时,它会在第一个要执行的指令处停止,该指令应该是动态链接器代码,但我不知道该代码是否是ELF文件的一部分。

答案1

内核加载动态加载器(这不是/usr/bin/ld;参见静态链接器、动态链接器、加载器和动态加载器的可执行ELF文件分别是什么?)。

当您运行 ELF 二进制文件时,内核使用其特定的 ELF 二进制加载器;对于动态链接的二进制文件,它会查找 ELF 标头中指定的解释器,加载它并指示它运行目标二进制文件。解释器是动态加载器,它加载任何所需的库,解析未定义的符号,并跳转到程序起始地址。 (看Linux 上存在哪些类型的可执行文件?有关内核中二进制加载的详细信息。)

LWN 有一篇文章详细介绍了,程序如何运行:ELF 二进制文件

相关内容