我不确定,动态链接器/usr/bin/ld
是否由操作系统自动调用,在加载 ELF 文件时,还是由嵌入在 ELF 文件中的代码调用?
当我用于r2
调试 ELF 文件时,它会在要执行的第一条指令处停止,这应该是动态链接器代码,但我不知道这段代码是否是 ELF 文件的一部分。
我不确定,动态链接器/usr/bin/ld
是否由操作系统自动调用,在加载 ELF 文件时,还是由嵌入在 ELF 文件中的代码调用?
当我用于r2
调试 ELF 文件时,它会在要执行的第一条指令处停止,这应该是动态链接器代码,但我不知道这段代码是否是 ELF 文件的一部分。
内核加载动态加载器(不是
/usr/bin/ld
;查看静态链接器、动态链接器、加载器和动态加载器的可执行 ELF 文件分别是什么?)。当您运行 ELF 二进制文件时,内核使用其特定的 ELF 二进制加载程序;对于动态链接的二进制文件,这会查找 ELF 标头中指定的解释器,加载该解释器并指示它运行目标二进制文件。解释器是动态加载器,它加载任何需要的库,解析未定义的符号,并跳转到程序的起始地址。(有关内核中二进制加载的详细信息,请参阅Linux 上存在哪些类型的可执行文件? )
LWN 有一篇文章详细介绍了程序如何运行:ELF 二进制文件。