繁体   English   中英

execve如何在Linux上调用?

[英]How is execve invoked on linux?

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

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

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

注意:这适用于armv8,Linux 3.10。

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

不是在Linux上,不是。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM