概述
4.5 linux内核装载ELF过程
- 当我们在linux系统bash下输入一个命令执行ELF程序的时候,过程是怎样的?
- bash调用fork()系统调用创建一个进程,然后该新进程调用execve()系统调用
- execve系统调用的入口是sys_execve(),它负责参数的检查复制,完成后调用do_execve()
- do_execve()读取文件的前128个字节,因为每种可执行文件的前128个字节的数据可以帮助我们知道则个文件是什么格式的,尤其是前4个字节(常常称之为魔数),比如ELF文件头的前四个字节就可以表示这是一个ELF格式的文件,这一步只负责读取128字节数据,不分析,然后调用search_binary_handle()
- search_binary_handle(),根据128个字节,判断是什么文件格式,然后匹配合适的文件装载处理过程,其中,ELF文件的装载处理过程是load_elf_binary()
- load_elf_binary()
- 检查ELF可执行文件格式的有效性
- 寻找动态链接
.interp
段 - 根据ELF文件头的内容,对ELF文件进行映射
- 初始化ELF进程环境
- 将系统调用的返回地址修改成ELF可执行文件的入口地址(e_entry)
- load_elf_binary()执行完毕,一路返回至sys_execve(),系统调用的返回地址已经改成了被装载的ELF文件的入口地址了,当执行完系统调用从内核态返回到用户态的时候,EIP寄存器直接跳转到了ELF程序的入口地址,装载完毕,然后就可以执行了
最后
以上就是优秀期待为你收集整理的程序员的自我修养3.4 linux内核装载ELF过程的全部内容,希望文章能够帮你解决程序员的自我修养3.4 linux内核装载ELF过程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复