【背景】理解ELF文件格式

    ELF文件格式是Linux系统下的一种常用目标文件(object file)格式,有三种主要类型。可重定位文件(relocatable file)类型和共享目标文件(shared object file)类型在本实验中没有涉及。本实验的OS文件类型是可执行文件(executable file)类型,这种ELF文件格式类型提供程序的进程映像,加载程序的内存地址描述等。

    简单地说,bootloader通过解析ELF格式的ucore,可以了解到ucore的代码段(机器码)/数据段(初始化的变量)等在文件中的位置和大小,以及应该放到内存中的位置;可了解ucore的BSS段(未初始化的变量,具体内容没有保存在文件中)的内存位置和大小。这样bootloader就可以把ucore正确地放置到内存中,便于ucore的正确执行。

    ELF的文件头包含整个执行文件的数据结构elf header,描述了整个执行文件的组织结构。其定义在proj2/3中的elf.h文件中:

    链接地址(Link address)和加载地址(Load address)

    Link Address是指编译器指定代码和数据所需要放置的内存地址,由链接器配置。Load Address是指程序被实际加载到内存的位置。一般由可执行文件结构信息和加载器可保证这两个地址相同。Link Addr和LoadAddr不同会导致:

    3.2.4.2