当我在Linux Box上时,我使用bash作为外壳。现在,我想知道bash如何处理ELF文件的执行,也就是说,当我键入./program且program是ELF文件时。我grep了bash-4.3.tar.gz,似乎没有某种魔术数字解析器可以确定文件是否为ELF,也没有找到exec()syscall。
整个进程如何运作?bash如何将ELF的执行传递给OS?
Bash对ELF一无所知。它只是看到您要求它运行一个外部程序,因此它将它的名称原样传递给execve(2)
。诸如可执行文件格式,shebang行和执行权限之类的知识都位于内核中的syscall后面。
(对于其他shell,这是相同的,尽管它们可能选择使用该exec(3)
系列中的另一个函数。)
在bash 4.3,这种情况对5195线execute_cmd.c
的shell_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 shellservice.c
模块中的调用的。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句