簡體   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