fork()、exec() 序列与目标文件格式?

fork()、exec() 序列与目标文件格式?

据我了解,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 可执行文件。

相关内容