bash如何执行ELF文件?

bash如何执行ELF文件?

当我使用 Linux Box 时,我使用 bash 作为 shell。现在我想知道 bash 如何处理 ELF 文件的执行,即当我输入 ./program 时,program 是一个 ELF 文件。我 grep bash-4.3.tar.gz,似乎没有某种幻数解析器来查明该文件是否是 ELF,也没有找到 exec() 系统调用。

整个进程如何运作? bash 如何将 ELF 的执行传递给操作系统?

答案1

Bash 对 ELF 一无所知。它只是看到您要求它运行外部程序,因此它将您按原样指定的名称传递给execve(2)。了解可执行文件格式等知识,舍邦线,并且执行权限位于其后面系统调用,在内核中。

(对于其他 shell 来说也是一样的,尽管它们可能会选择使用exec(3)而是家人。)

在 Bash 4.3 中,这发生在第 5195 行execute_cmd.cshell_execve()函数中。

如果你想从源代码层面了解Linux,我建议下载一份研究 Unix V6 或 V7,并经过而不是现代 Linux 系统中的所有复杂性。狮子之书是很好的代码指南。

V7 是哪里伯恩外壳首次亮相。它的整个 C 源代码只是 Bash 中的一个 C 文件大小的一半多一点。这汤普森壳V6 中的大小几乎是原始 Bourne shell 的一半。然而,这两个更简单的 shell 都做与 Bash 相同的事情,并且出于相同的原因。 (这似乎是来自 Thompson shell 的execv(2)调用和来自 Bourne shell 模块的调用。)texec()execve()execs()service.c

相关内容