ELF学习--装载过程

Posted fellow_jing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ELF学习--装载过程相关的知识,希望对你有一定的参考价值。

当我们在linux bash下执行ELF程序时,Linux系统是怎样装载和执行的呢?

1.bash进程fork出子进程

2.在bash的子进程中调用execve系统调用来执行指定的ELF。

3.execve系统调用的入口是sys_execve,在sys_execve会调用do_execve

4.在do_execve中会读取可执行文件的前128个字节。这128个字节用来判断可执行文件是哪种类型。

5.do_execve读取了128个字节的文件头后,调用serch_binary_handle去搜索匹配合适的可执行文件装载处理过程。search_binary_handle会通过判断文件头部的魔数确定文件的格式。ELF的装载处理过程是load_elf_binary.

6.在load_elf_binary中,检查文件格式的有效性后,寻找动态链接的.interp 段。根据ELF可执行文件的program headers,建立可执行文件和虚拟内存的映射。将execev系统调用的返回地址改成ELF可执行文件的入口地址。当execev返回时就可执行ELF文件。

以上是关于ELF学习--装载过程的主要内容,如果未能解决你的问题,请参考以下文章

读书笔记|《程序员的自我修养》- 04 可执行文件的装载与进程

读书笔记|《程序员的自我修养》- 04 可执行文件的装载与进程

LINUX内核分析第七周学习总结——可执行程序的装载

Linux应用程序的装载和执行

Linux环境下:程序的链接, 装载和库[可执行文件的装载]

《linux 内核分析》 第7周 可执行程序的装载