【问题标题】:How is execve invoked on linux?linux上如何调用execve?
【发布时间】:2017-11-22 21:29:27
【问题描述】:

如果您在 linux 上调用 exec(...),它最终会调用 execve(),后者调用 sys_execve(),然后调用 do_execve,然后遍历处理程序列表,直到找到匹配的处理程序(有binfmt_elf.c 中的默认精灵处理程序)。

另一方面,如果您查看 glibc 的源代码,那么 execve() 会调用 hurd_exec(),然后它会调用 __file_exec(我找不到它的源代码)。它看起来最终会出现在dl-open.c,但我找不到在两者之间运行的代码。

我假设用户空间程序将始终从库中调用版本,在这种情况下,__file_exec 会去哪里?我在内核或 glibc 代码中都找不到对它的引用...

注意:这是针对 armv8、linux 3.10 的。

【问题讨论】:

    标签: linux exec glibc


    【解决方案1】:

    另一方面,如果你查看 glibc 的源代码,那么 execve() 会调用 hurd_exec()

    不是在 Linux 上,它没有。

    您可能正在查看 sysdeps/mach/hurd/execve.c,但在 Linux 上,您应该查看 sysdeps/unix/sysv/linux/execve.c,它调用 INLINE_SYSCALL (execve, ...);,它执行您所期望的操作:将控制权传递给内核。

    【讨论】:

    • 啊,这解释了一些事情。谢谢你让我走错了路!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多