[英]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.