调用/lib/ld-linux.so.2中的_start函数之前会发生什么?

时间:2016-04-15 02:21:10

标签: linux ld init

我发现程序的入口点是我机器中的动态链接器/lib/ld-linux-so.2。

enter image description here

testEntries.add(new TestEntry(entry));
adapter.notifyItemInserted(testEntries.size() - 1);

实际上,入口点是0xb7fdf1d0。一些上下文信息如下。

readelf -h /lib/ld-linux.so.2 |grep Entry 
Entry point address:               0x11d0

enter image description here

但是此时堆栈已经存在,它保存了环境变量和程序的参数。那么谁在_start函数之前进入堆栈?

1 个答案:

答案 0 :(得分:1)

内核设置堆栈。

当内核处理动态加载程序的exec时,它会初始化一些跟踪虚拟内存映射和堆栈位置的数据结构。在fs/exec.c中,堆栈位置已设置。

当调度程序将控制权交给这个新进程时,它会将堆栈指针的值设置为相应的值。