据我了解,POSIX 系统依赖某些链接器格式在一系列fork()
exec()
调用期间组织内存。 a.out、COFF 和 ELF 是操作系统使用的众所周知的二进制目标文件格式。
有谁知道按顺序读取这些的代码在哪里fork()
exec()
?
答案1
尽管在大多数类似 POSIX 的系统中,内核至少会处理加载可执行文件并将其设置在内存中的某些部分,但没有通用的答案。
在 Linux(不是经过认证的 POSIX 系统,而是类似 POSIX 的系统)中,它支持的可执行格式的内核加载器位于fs
内核源代码目录,在名称以 . 开头的文件中binfmt_
。看Linux 上存在哪些类型的可执行文件?更多细节。
在 macOS(经过认证的 POSIX 系统)中,加载程序位于bsd/kern/kern_exec.c
在达尔文源头,在各种exec_*_imgact
功能中。
在 OpenBSD 中,加载器位于sys/kern
,在exec_*
文件中;exec_elf.c
处理 ELF 可执行文件。