代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

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

  •  0
  • Tim unnamed eng  · 技术社区  · 6 年前

    了解Linux内核 execve() 电话 load_binary() linux_binfmt 加载二进制()

    调用start_thread()宏来修改保存在内核模式堆栈上的用户模式寄存器eip和esp的值,以便它们指向 动态链接器的入口点

    mosvy wrote:

    execve 系统调用,在返回到用户模式时,将IP(指令指针)寄存器设置为指向 世界的开始 _start ,并且SP(stack pointer)寄存器设置为指向argv+env字符串列表的开头,因此从用户模式的角度来看,效果就像有人调用了 功能如下:

    _start(argc, argv0, argv1, ... , NULL, env0, env1, ... NULL)
    

    在调用约定中,所有参数都在堆栈上传递。

    在“世界之初” _开始 他是什么意思 要执行的可执行文件的入口点 ?

    哪一个是正确的?也就是说 execve() 设置寄存器以调用动态链接器或要执行的可执行文件?

    1 回复  |  直到 6 年前
        1
  •  1
  •   ctrl-alt-delor    6 年前

    _start是可执行文件的入口点。在C中,您可能认为main是入口点,但这只是程序员的观点。编译器可能会在\u start中插入其他代码,以便在调用main之前运行。