我是靠谱客的博主 优秀期待,最近开发中收集的这篇文章主要介绍程序员的自我修养3.4 linux内核装载ELF过程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

4.5 linux内核装载ELF过程

  • 当我们在linux系统bash下输入一个命令执行ELF程序的时候,过程是怎样的?
  1. bash调用fork()系统调用创建一个进程,然后该新进程调用execve()系统调用
  2. execve系统调用的入口是sys_execve(),它负责参数的检查复制,完成后调用do_execve()
  3. do_execve()读取文件的前128个字节,因为每种可执行文件的前128个字节的数据可以帮助我们知道则个文件是什么格式的,尤其是前4个字节(常常称之为魔数),比如ELF文件头的前四个字节就可以表示这是一个ELF格式的文件,这一步只负责读取128字节数据,不分析,然后调用search_binary_handle()
  4. search_binary_handle(),根据128个字节,判断是什么文件格式,然后匹配合适的文件装载处理过程,其中,ELF文件的装载处理过程是load_elf_binary()
  5. load_elf_binary()
    1. 检查ELF可执行文件格式的有效性
    2. 寻找动态链接.interp
    3. 根据ELF文件头的内容,对ELF文件进行映射
    4. 初始化ELF进程环境
    5. 将系统调用的返回地址修改成ELF可执行文件的入口地址(e_entry)
  6. load_elf_binary()执行完毕,一路返回至sys_execve(),系统调用的返回地址已经改成了被装载的ELF文件的入口地址了,当执行完系统调用从内核态返回到用户态的时候,EIP寄存器直接跳转到了ELF程序的入口地址,装载完毕,然后就可以执行了

最后

以上就是优秀期待为你收集整理的程序员的自我修养3.4 linux内核装载ELF过程的全部内容,希望文章能够帮你解决程序员的自我修养3.4 linux内核装载ELF过程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部