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 可执行文件的装载与进程