Skip to main content
 首页 » 编程设计

linker中在调用 ELF 的默认入口点之前是否运行任何用户模式代码

2025年02月15日110yxwkf

许多文档都说程序入口点(默认为_start)会进行初始化,例如准备命令行等。控件是如何传递到_start和任何用户模式的在此之前为新进程运行了代码?

请您参考如下方法:

How is the control been past to _start and any user-mode code was run before this for the new process?

需要考虑两种情况:完全静态和动态链接的可执行文件。

在完全静态的情况下,_start处的指令是执行的第一个用户模式指令,即进程在诞生时就由内核在该指令处设置了指令指针。

在动态链接的情况下,情况要复杂得多,并且有 1000 条用户模式指令在 _start 之前运行:动态链接器初始化自身,mmaps 所有必需的共享库,初始化它们,然后将控制权传递给 _start

在基于 glibc 的系统上,您可以通过运行例如来观察这一点

LD_DEBUG=files /bin/date 

另请参阅this answer .