我发现程序的入口点是我机器中的动态链接器/lib/ld-linux-so.2。
testEntries.add(new TestEntry(entry));
adapter.notifyItemInserted(testEntries.size() - 1);
实际上,入口点是0xb7fdf1d0。一些上下文信息如下。
readelf -h /lib/ld-linux.so.2 |grep Entry
Entry point address: 0x11d0
但是此时堆栈已经存在,它保存了环境变量和程序的参数。那么谁在_start函数之前进入堆栈?
答案 0 :(得分:1)
内核设置堆栈。
当内核处理动态加载程序的exec时,它会初始化一些跟踪虚拟内存映射和堆栈位置的数据结构。在fs/exec.c中,堆栈位置已设置。
当调度程序将控制权交给这个新进程时,它会将堆栈指针的值设置为相应的值。