bash如何执行ELF文件?


8

当我在Linux Box上时,我使用bash作为外壳。现在,我想知道bash如何处理ELF文件的执行,也就是说,当我键入./program且program是ELF文件时。我grep了bash-4.3.tar.gz,似乎没有某种魔术数字解析器可以确定文件是否为ELF,也没有找到exec()syscall。

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

Answers:


15

Bash对ELF一无所知。它只是看到您要求它运行一个外部程序,因此它将其原样传递给它execve(2)。诸如可执行文件格式,shebang行和执行权限之类的知识都位于内核中的syscall后面。

(对于其他shell,这是相同的,尽管它们可能选择使用该exec(3)系列中的另一个函数。)

在bash 4.3,这种情况对5195线execute_cmd.cshell_execve()功能。

如果你想在源代码级一定要了解Linux,我建议下载的副本研究的Unix V6或V7,并通过去,而不是所有的是现代的Linux系统的复杂性。狮子书是代码的良好指南。

V7是Bourne shell首次亮相的地方。它的整个C源代码只是Bash中一个C文件大小的一半多一点。V6中的Thompson外壳几乎是原始Bourne外壳的一半。但是,这两个较简单的Shell都执行与Bash相同的操作,并且出于相同的原因。(这似乎是execv(2)来自texec()Thompson shell的execve()调用,而来自execs()Bourne shell的service.c模块的调用。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.