了解Linux内核表示execve()
调用每个load_binary()
对象的linux_binfmt
,并且load_binary()
调用start_thread()宏来修改保存在内核模式堆栈中的用户模式寄存器eip和esp的值,以便它们指向mosvy wrote:动态链接器的入口点并指向新的顶部。用户模式堆栈。
发生的情况是内核安排,并且SP(堆栈指针)寄存器设置为指向argv + env字符串列表的开头,因此从用户模式的角度来看,其效果就像有人将execve
系统调用,返回到用户模式后,将IP(指令指针)寄存器设置为指向
_start
函数的开头
_start
函数调用为:_start(argc, argv0, argv1, ... , NULL, env0, env1, ... NULL)
在调用约定中,所有参数都在堆栈上传递。?哪个是正确的?即通过“
_start
函数的开头”,他的意思是要执行的可执行文件的入口点
execve()
是否设置寄存器来调用动态链接器或要执行的可执行文件?