Linux是如何加载ELF文件的?

Linux加载ELF有很多细节。下面是宏观流程:

  1. 首先要识别出二进制文件的格式为ELF,如果不是,则加载失败。
  2. 解析ELF文件头部,头部信息包括入口地址,程序头部,段头信息。
  3. Linux内核分配内存给ELF文件,根据程序头部定义的代码段、数据段、栈或者其他段来分配内存
  4. 加载代码段、数据段的内容
  5. 动态链接,符号解析、地址解析。加载共享库。
  6. 设置执行内容,寄存器、程序计数器、栈指针等信息
  7. 跳转到程序入口
  8. 程序从入口点开始执行,linux把控制权交给程序