浅析程序的装载

在《自己动手写操作系统》中有一段代码,通过这段代码大致可以让人知道装载是怎么回事(静态链接)

首先要分析下elf的文件结构,我就简单的说了,elf首先是一个文件头表,顾名思义,这个文件头表里面保存的是文件的信息,其中一个很重要的信息是程序的入口地址,接着还有若

干程序头表,这个比较重要,每一个程序头表对应着elf可执行文件中的一段。程序头表中包含有所描述的段要加载到内存的那个位置,还有段的大小。

有了上述这些信息,下面就来说下程序的装载的步骤:

1. 检查elf可执行文件格式的有效性,比如魔术,程序头表中段的数量

2.根据elf可执行文件的程序头表的描述,对elf文件进行映射,比如代码,数据,只读数据

3.初始化elf进程环境

4将系统调用的返回地址修改成elf可执行文件的入口点,这个入口点取决于程序的链接方式,对于静态链接的可执行文件,这个程序的入口地址就是就是文件头中所提到的

这里在提下我以前没有注意的两个概念

段表VS程序头表

程序头表只在可执行文件中有,它描述了可执行文件和虚拟空间的映射(segment)

段表在任何elf文件中都有(section)

段表包含elf文件中各个段的信息

程序头表把段表中相同权限的段合并到一起当做一个segment映射,旨在减少对齐所浪费的空间

一个segment对应一个VMA,从装载的角度重新划分了各个elf可执行文件的段

原文地址:https://www.cnblogs.com/cdwodm/p/2920574.html