execve()是否设置寄存器来调用动态链接程序或要执行的可执行文件?

问题描述 投票:0回答:1

了解Linux内核表示execve()调用每个load_binary()对象的linux_binfmt,并且load_binary()

调用start_thread()宏来修改保存在内核模式堆栈中的用户模式寄存器eip和esp的值,以便它们指向

动态链接器的入口点并指向新的顶部。用户模式堆栈。

mosvy wrote:

发生的情况是内核安排execve系统调用,返回到用户模式后,将IP(指令指针)寄存器设置为指向

_start函数的开头

,并且SP(堆栈指针)寄存器设置为指向argv + env字符串列表的开头,因此从用户模式的角度来看,其效果就像有人将_start函数调用为:_start(argc, argv0, argv1, ... , NULL, env0, env1, ... NULL)
在调用约定中,所有参数都在堆栈上传递。

通过“ _start函数的开头”,他的意思是

要执行的可执行文件的入口点

哪个是正确的?即execve()是否设置寄存器来调用动态链接器或要执行的可执行文件?
linux linux-kernel dynamic-linking exec
1个回答
1
投票
我的解释是,您所描述的所有问题都发生在调用_start(或似乎要调用_start)之前。
© www.soinside.com 2019 - 2024. All rights reserved.