关于ELF文件格式

合集下载

elf文件格式

elf文件格式

第1章文件格式1.1 Executable and Linking Format (ELF)1.1.1整体结构ELF对象格式用于目标文件(.o扩展名)和执行文件. 有些信息只出现在目标文件或执行文件中.ELF文件由下列部件构成. ELF header必须放在文件的开始;其他部件可以随便排放(ELF header给出了其他部件的偏移量).1.1.2ELF头[ELF Header]ELF头包含目标文件的一般信息;具有如下结构(from elf.h):#define EI_NIDENT 16typedef struct {unsigned char e_ident[EI_NIDENT];Elf32_Half e_e_type;Elf32_Half e_machine;Elf32_Word e_version;Elf32_Addr e_entry;Elf32_Off e_phoff;Elf32_Off e_shoff;Elf32_Word e_flags;Elf32_Half e_ehsize;Elf32_Half e_phentsize;Elf32_Half e_phnum;Elf32_Half e_shentsize;Elf32_Half e_shnum;Elf32_Half e_shstrndx;};ELF头域描述:1.1.3程序头[Program Header]程序头为一结构数组,每个元素描述执行文件的一个可载入段.元素结构如下(from elf.h):typedef struct {Elf32_Word p_type;Elf32_Off p_offset;Elf32_Addr p_vaddr;Elf32_Addr p_paddr;Elf32_Word p_filesz;Elf32_Word p_memsz;Elf32_Word p_flags;Elf32_Word p_align;} Elf32_Phdr;1.1.4Section HeadersELF文件中的每个section的都有激励[incitation]头; Section个数由ELF Header中的e_shnum域指明. Section headers结构如下(from elf.h):typedef struct {Elf32_Word sh_name;Elf32_Word sh_type;Elf32_Word sh_flags;Elf32_Addr sh_addr;Elf32_Off sh_offset;Elf32_Word sh_size;Elf32_Word sh_link;Elf32_Word sh_info;Elf32_Word sh_addralign;Elf32_Word sh_entsize;} Elf32_Shdr;1.1.5Special Sections1.1.6重定位信息[Relocation Information]重定位信息section包含关于非确定引用[unresolved references]的信息.因为编译器[compilers]和汇编器[assemblers]不知道符号将分配的绝对内存地址,和别的文件的符号定义;所以对符号的每个引用都将创建一个重定位条目. 该条目指向地址(where the reference is being made), 和指向包含被引用符号的符号表. 连接器[linker]给所有符号分配地址之后, 将使用重定位信息添入正确的地址. 执行文件没有重定位section.例如: 汇编表示符号加上偏移:move.l var+16,d0偏移量存储在r_addend域,这样,符号真实地址加上该地址域将产生一个正确的引用.重定位条目有如下结构(from elf.h):typedef struct {Elf32_Addr r_offset;Elf32_Word r_info;Elf32_Sword r_addend;} Elf32_Rel;1.1.7符号表符号表section .symtab为一数组,数组元素包含关于被ELF文件引用的符号的信息.符号表条目有如下结构(from elf.h):typedef struct {ELF32_Word st_name;ELF32_Addr st_value;ELF32_Word st_size;unsigned char st_info;unsigned char st_other;Elf32_Half sth_shndx;} Elf32_Sym;1.1.8串表串表sections( .strtab和.shstrtab)包含符号表中符号名和section名.名都以null结束. 这些符号通过偏移指向[point into]串表. 串表的第一字节总是零, 其后所有串顺序存放.。

linux elf执行流程

linux elf执行流程

linux elf执行流程Linux ELF 执行流程ELF(Executable and Linkable Format)是Linux系统中可执行文件的一种格式。

在Linux下,当我们执行一个可执行文件时,操作系统会按照一定的流程解析和执行该文件。

本文将介绍Linux ELF 的执行流程。

1. ELF文件格式ELF文件由多个段(section)组成,每个段都有特定的作用。

常见的段包括.text段(包含程序的指令)、.data段(包含程序的全局变量和静态变量)、.bss段(包含未初始化的全局变量和静态变量)等。

2. 加载可执行文件当用户在终端输入可执行文件名并按下回车键时,操作系统会通过解析文件头判断该文件是否为有效的ELF文件。

如果是有效的ELF 文件,操作系统会为该进程分配一块内存空间,并将ELF文件中的各个段加载到相应的内存地址上。

3. 解析程序入口操作系统会根据ELF文件中的程序入口地址(Entry Point)来确定程序的入口点。

程序入口地址通常位于.text段的起始位置。

操作系统将程序计数器(PC)设置为程序入口地址,从而开始执行程序。

4. 执行程序指令程序从程序入口地址开始执行,按照顺序执行.text段中的指令。

每条指令都会被解码和执行,直到程序结束或者遇到跳转指令。

5. 解析跳转指令在程序执行过程中,可能会遇到跳转指令(如条件跳转、无条件跳转、函数调用等)。

当遇到跳转指令时,操作系统会根据指令中的目标地址重新设置程序计数器,从而改变程序的执行流程。

6. 处理函数调用当程序执行到函数调用指令时,操作系统会将函数的返回地址和参数等信息保存到栈中,并跳转到函数的入口地址执行。

函数执行完毕后,操作系统会从栈中恢复返回地址,继续执行函数调用指令后面的指令。

7. 处理系统调用程序中可能会包含系统调用指令,用于请求操作系统提供各种服务。

当遇到系统调用指令时,操作系统会切换到内核态,执行相应的系统调用处理程序,并返回结果给用户程序。

ELF 文件格式分析

ELF 文件格式分析
2 相关标准........................................................................................ 1
2.1 SYSTEM V ABI........................................................................................................................................ 1 2.2 LSB ........................................................................................................................................................ 2
3 ELF文件格式 ..................................................................................................................... 2
3.1 简介........................................................................................................................................................ 2 3.1.1 目标文件中的数据表示................................................................................................................ 2

elf格式文件解析

elf格式文件解析

ELF可执行文件的解析与加载ELF文件格式简介1.1前言ELF-可执行链接格式最初是由UNIX系统实验室(USL)作为应用程序二进制接口(ABI)开发和发行。

工具接口标准委员会TIS已经将ELF作为运行在Intel32位架构之上的各类型操作系统的可导出对象文件格式标准。

ELF标准为开发者提供了一组横跨多运行环境的二进制接口定义来组织软件开发。

1.2对象文件1.2.1 介绍本部分描述了ABI对象文件格式,也称之为ELF。

有三种主要类型的对象文件:1. 可重组(relocatable)文件包含了适合用来链接其他对象文件的代码和数据,从而创建出可执行或可共享的对象文件;2. 可执行(executable)文件包含了用于执行的程序,该文件规定了exec如何创建一个程序的进程映像;3. 可共享对象(shared object)文件包含了用来在两个上下文之间链接的代码和数据。

首先,链接器ld将该文件和其他的可重组文件或可共享对象文件进行处理后,创建出新对象文件,其次,动态链接器将该新对象文件与可执行文件或共享对象组合,来共同创建一个进程映像;经过汇编器以及链接器创建成的对象文件,其是在处理器上可直接执行的程序的二进制代表。

本部分主要描述文件格式以及其如何用来构建程序。

后一部分也描述了对象文件,集中在程序执行所必须的信息上。

1.2.1.1 文件格式在程序链接和程序执行过程都涉及到对象文件。

出于方便和效率,对象文件格式图从链接和运行两个视角来展示文件的内容。

ELF header位于文件的开始处,其用来描述文件的组织结构。

Section包含了大量的对象文件信息,从链接的视角来看就是指令、数据、符号表、重组信息等等。

Segment和Program是从程序执行视角来观看的,这将在下部分讲解。

如果存在Program Header table的话,其将告诉操作系统如何创建进程映像。

用来创建进程映像(执行程序)的文件必须包含program header table。

elf文件格式(中文版)

elf文件格式(中文版)

序言1. OBJECT文件导言ELF头(ELF Header)SectionsString表(String Table)Symbol表(Symbol Table)重定位(Relocation)2. 程序装载与动态连接导言Program头(Program Header)Program装载(Program Loading)Dynamic连接(Dynamic Linking)3. C LIBRARYC Library________________________________________________________________导言________________________________________________________________ ELF: 可执行连接格式可执行连接格式是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface(ABI)而开发和发布的。

工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位INTEL体系上不同操作系统之间可移植的二进制文件格式。

假定开发者定义了一个二进制接口集合,ELF标准用它来支持流线型的软件发展。

应该减少不同执行接口的数量。

因此可以减少重新编程重新编译的代码。

关于这篇文档这篇文档是为那些想创建目标文件或者在不同的操作系统上执行文件的开发着准备的。

它分以下三个部分:* 第一部分, “目标文件Object Files”描述了ELF目标文件格式三种主要的类型。

* 第二部分, “程序转载和动态连接”描述了目标文件的信息和系统在创建运行时程序的行为。

* 第三部分, “C 语言库”列出了所有包含在libsys中的符号,标准的ANSI C和libc的运行程序,还有libc运行程序所需的全局的数据符号。

注意: 参考的X86体系已经被改成了Intel体系。

________________________________________________________________1. 目标文件(Object file)________________________________________________________________========================= 序言=========================第一部分描述了iABI的object文件的格式, 被称为ELF(Executableand Linking Format). 在object文件中有三种主要的类型。

ELF文件格式

ELF文件格式

ELF文件格式在介绍ELF格式之前,先简单说明一下可执行文件的生成流程:1)编写C源文件,或汇编源文件;2)准备共享库格式的目标文件(shared object file),如数学库、标准库;2)用编译器(compiler)将C编译成可重定位格式的目标文件(relocatable object file),用汇编器(assembler)将汇编源文件编译成可重定位格式的目标文件;3)用连接器(linker)将第二步的共享个库文件和第三步生成的目标文件链接生成可执行文件(executable file)。

ELF(excutable and linking format)是一种可执行可链接格式的二进制文件,它可以用来表示relocatable file、executable file或者shared object file,这三者都是目标文件(object file)。

所谓“可执行”指可以被调入内存供CPU直接运行;“可链接”指多个ELF格式的目标文件可以被链接在一起形成一个可执行文件。

下图左边是可链接格式的ELF文件格式,右边是可执行格式的ELF文件格式。

无论是linking view还是execution view的ELF文件,他们都包含一个ELF Header,它包含文件的基本信息。

ELF自定义了一些类型,并强制规定了他们所占的字节个数,以实现跨平台,如Elf32_Half占2字节、Elf32_Word占4字节、Elf32_Off占4字节等。

1typedef struct2{3unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */ 4Elf32_Half e_type; /*目标文件类型 */5Elf32_Half e_machine; /*Architecture */6Elf32_Word e_version; /* Object file version */7Elf32_Addr e_entry; /*入口地址 */8Elf32_Off e_phoff; /* Program header table文件偏移 */ 9Elf32_Off e_shoff; /* Section header table 文件偏移 */ 10Elf32_Word e_flags; /* Processor-specific flags */11Elf32_Half e_ehsize; /* ELF header 大小 */12Elf32_Half e_phentsize; /*每个Program header大小 */13Elf32_Half e_phnum; /*一共多少个Program header */14Elf32_Half e_shentsize; /* 每个Section header大小 */15Elf32_Half e_shnum; /*一共多少个 Section header */16Elf32_Half e_shstrndx; /*Section的字符表在section header table的索引值 */17} Elf32_Ehdr;18e_ident[EI_NIDENT]是一个有16个字节的数组,e_ident[0]=0x7f,e_ident[1]=”E”,e_ident[2]=”L”,e_ident[3]=”F”,e_ident[4]指示ELFCLASS(0:ELFCLASSNONE;1:ELFCLASS32;2:ELFCLASS64),e_ident[5]指示程序中的数据格式(0:无效;1:小端;2:大端),e_ident[6]指示版本固定为0x1,e_ident[7]到e_ident[14]固定为0,e_ident[15]固定为16用于指示e_ident[]数组有16个元素。

Android平台ELF文件格式

Android平台ELF文件格式

Android平台ELF⽂件格式ELF英⽂全程为:Executable Linkable Format,ELF属于Linux平台下可执⾏⽂件。

ELF⽂件格式与Windows下的PE(Portable Executable)⽂件格式相似,都是属于COFF(Common File Format)⽂件格式变种。

⾕歌的Android操作系统内核采⽤Linux内核框架实现,所以Android平台原⽣⽂件格式与Linux可执⾏⽂件格式完全相似,同属于ELF类型⽂件。

Android平台下游戏逻辑通常使⽤C、C++语⾔实现,编译之后的可执⾏⽂件属于ELF⽂件格式,ELF⽂件格式整体布局如下图所⽰:⾕歌的Android NDK提供⼯具⽅便开发者查看ELF⽂件格式,对应⼯具名为:arm-linux-androideabi-readelf,⼯具所在NDK 根⽬录的相对路径为:android-ndk-r9c\toolchains\arm-linux-androideabi-4.6\prebuilt\windows-x86_64\bin\,arm-linux-androideabi-readelf⼯具部分使⽤说明如下图所⽰:本章使⽤“libTest.so”⽂件作为实例介绍ELF格式信息。

下⾯将详细讲解ELF⽂件格式,以便让读者对Android平台原⽣程序的⽂件格式有较好理解。

1.1.1⽂件头信息ELF⽂件头描述⽂件基本属性信息,包括ELF⽂件版本号、⽬标机器型号、程序⼊⼝、段表描述信息等信息。

ELF⽂件头数据⼤⼩为0x34字节,实例⽂件的ELF⽂件头信息⼆进制数据如下所⽰:上图中标为蓝⾊的数据为ELF⽂件头⼆进制内存数据,最右边可明显看出有“ELF”字符串,读者也许已猜到数据对应ELF⽂件标志,即判断是否为ELF⽂件表⽰。

arm-linux-androideabi-readelf⼯具可⽅便查看ELF⽂件头信息。

利⽤arm-linux-androideabi-readelf⼯具查看ELF⽂件头信息命令如下:arm-linux-androideabi-readelf.exe -h libTest.so对应获取的⽂件头信息如下:上图重要信息解释如下:Magic:表⽰魔数标志信息,⽤来指明该⽂件是⼀个ELF⽬标⽂件,第⼀个字节固定为“7F”,后⾯三个字节为E、L、F字母的ASCII数值。

ELF文件格式

ELF文件格式

ELF文件格式•目标文件有三种类型:–可重定位文件(Relocatable File)包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。

–可执行文件(Executable File)包含适合于执行的一个程序,此文件规定了exec()如何创建一个程序的进程映像。

–共享目标文件(Shared Object File)包含可在两种上下文中链接的代码和数据。

首先链接编辑器可以将它和其它可重定位文件和共享目标文件一起处理,生成另外一个目标文件。

其次,动态链接器(Dynamic Linker)可能将它与某个可执行文件以及其它共享目标一起组合,创建进程映像。

•目标文件全部是程序的二进制表示,目的是直接在某种处理器上直接执行。

ELF格式文件目前是UNIX系统非常常见二进制文件格式,ELF文件格式主要3大部分,ELF 文件头,节区表,和节区。

对于可执行文件对应的是段表,段。

下面这3部分简单分布情况,上面这条横条可以看成ELF文件从头到尾。

对于ELF头,节区表,节区都对应分布在文件里面,通过偏移来表示其对应在文件的位置。

2、ELF头对应字段的意义简单用下图来说明,其他字段可以对应解析3、节区相关信息4、对于节区经常使用的两个信息字段sh_info,sh_link对应字段意义5、对于一个ELF目标文件,通常都会有以下几个节区,可以通readelf–S test.oSection Headers:[Nr]Name Type Addr Off Size ES Flg Lk Inf Al [0]NULL0000000000000000000000000[1].text PROGBITS0000000000003400001100AX004[2].data PROGBITS0000000000004800000000WA004[3].bss NOBITS0000000000004800000000WA004[4].comment PROGBITS0000000000004800002a00001[5].note.GNU-stack PROGBITS0000000000007200000000001[6].shstrtab STRTAB0000000000007200004500001[7].symtab SYMTAB0000000000022000008010874[8].strtab STRTAB000000000002a000000a00001符号表:对应于.symtab,它保存着目标文件中所有的符号信息字符串表:.strtab,保存字符窜信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

现代Linux采用ELF(Executable and Linking Format)做为其可连接和可执行文件的格式,因此ELF格式也向我们透出了一点Linux核内的情景,就像戏台维幕留下的一条未拉严的缝。

PC世界32仍是主流,但64位的脚步却已如此的逼近。

如果你对Windows比较熟悉,本文还将时时把你带回到PE中,在它们的相似之处稍做比较。

ELF文件以“ELF 头”开始,后面可选择的跟随着程序头和节头。

地理学用等高线与等温线分别展示同一地区的地势和气候,程序头和节头则分别从加载与连接角度来描述EFL文件的组织方式。

ELF头------------------------------------------------ELF头也叫ELF文件头,它位于文件中最开始的地方。

/usr/src/linux/include/linux/elf.htypedef struct elf32_hdr{unsigned char e_ident[EI_NIDENT];Elf32_Half e_type;Elf32_Half e_machine;Elf32_Word e_version;Elf32_Addr e_entry; /* Entry point */Elf32_Off e_phoff;Elf32_Off e_shoff;Elf32_Word e_flags;Elf32_Half e_ehsize;Elf32_Half e_phentsize;Elf32_Half e_phnum;Elf32_Half e_shentsize;Elf32_Half e_shnum;Elf32_Half e_shstrndx;} Elf32_Ehdr;#define EI_NIDENT 16ELF头中每个字段的含意如下:Elf32_Ehdr->e_ident[] (Magic)这个字段是ELF头结构中的第一个字段,在elf.h中EI_NIDENT被定义为16,因此它占用16个字节。

e_ident的前四个字节顺次应该是0x7f、 0x45、 0x4c、 0x46,也就是"\177ELF"。

这是ELF文件的标志,任何一个ELF文件这四个字节都完全相同。

16进制 8进制字母0x7f 01770x45 E0x4c L0x46 F第5个字节标志了ELF格式是32位还是64位,32位是1,64位是2。

第6个字节,在0x86系统上是1,表明数据存储方式为低字节优先。

第10个字节,指明了在e_ident中从第几个字节开始后面的字节未使用。

Elf32_Ehdr->e_type (Type)ELF文件的类型,1表示此文件是重定位文件,2表示可执行文件,3表示此文件是一个动态连接库。

Elf32_Ehdr->e_machine (Machine)CPU类型,它指出了此文件使用何种指令集。

如果是Intel 0x386 CPU 此值为3,如果是AMD 64 CPU此值为62也就是16进制的0x3E。

Elf32_Ehdr->e_version (Version)ELF文件版本,为1。

Elf32_Ehdr->e_entry (Entry point address)可执行文件的入口虚拟地址。

此字段指出了该文件中第一条可执行机器指令在进程被正确加载后的内存地址!(注: 入口地址并不是可执行文件的第一个函数 -- main函数的地址)。

Elf32_Ehdr->e_phoff (Start of program headers)程序头在ELF文件中的偏移量。

如果程序头不存在此值为0。

Elf32_Ehdr->e_shoff (Start of section headers)节头在ELF文件中的偏移量。

如果节头不存在此值为0。

Elf32_Ehdr->e_ehsize (Size of ELF header)它描述了“ELF头”自身占用的字节数。

Elf32_Ehdr->e_phentsize(Size of program headers)程序头中的每一个结构占用的字节数。

程序头也叫程序头表,可以被看做一个在文件中连续存储的结构数组,数组中每一项是一个结构,此字段给出了这个结构占用的字节大小。

e_phoff指出程序头在ELF文件中的起始偏移。

Elf32_Ehdr->e_phnum (Number of program headers) 此字段给出了程序头中保存了多少个结构。

如果程序头中有3个结构则程序头(程序头表)在文件中占用了(3×e_phentsize)个字节的大小。

Elf32_Ehdr->e_shentsize(Size of section headers)节头中每个结构占用的字节大小。

节头与程序头类似也是一个结构数组,关于这两个结构的定义将分别在讲述程序头和节头的时候给出。

Elf32_Ehdr->e_shnum (Number of section headers) 节头中保存了多少个结构。

Elf32_Ehdr->e_shstrndx(Section header string table index) 这是一个整数索引值。

节头可以看作是一个结构数组,用这个索引值做为此数组的下标,它在节头中指定的一个结构进一步给出了一个“字符串表”的信息,而这个字符串表保存着节头中描述的每一个节的名称,包括字符串表自己也是其中的一个节。

至此为止我们已经讲述了“ELF头”,在此过程中提前提到的一些将来才用的概念,不必急于了解。

现在读者可自己编写一个小程序来验证刚学到的知识,这有助于进一步的学习。

elf.h文件一般会存在于/usr/include目录下,直接include它就可以。

但我们能够验证的知识有限,当更多知识联系在一起的时候我们的理解正误才可以得到更好的验证。

接下来我们再学习程序头。

#readelf -h a.outELF Header:Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00Class: ELF32Data: 2's complement, little endian Version: 1 (current)OS/ABI: UNIX - System VABI Version: 0Type: EXEC (Executable file) Machine: Intel 80386Version: 0x1Entry point address: 0x80482f0Start of program headers: 52 (bytes into file) Start of section headers: 3228 (bytes into file) Flags: 0x0Size of this header: 52 (bytes)Size of program headers: 32 (bytes)Number of program headers: 7Size of section headers: 40 (bytes)Number of section headers: 36Section header string table index: 33程序头(程序头表) --Program Header------------------------------------------------程序头有时也叫程序头表,它保存了一个结构数组(结构Elf32_Phdr 的数组)。

程序头是从加载执行的角度看待ELF文件的结果,从它的角度ELF文件被分成许多个段。

每个段保存着用于不同目的的数据,有的段保存着机器指令,有的段保存着已经初始化的变量;有的段会做为进程映像的一部分被操作系统读入内存,有的段则只存在于文件中。

后面还会讲到ELF的节头,节头把ELF文件分成了许多节。

ELF文件的一部分常常是既在某一段中又在某一节中。

Linux和Windows的进程空间都采用的是平坦模式,没有x86的段概念,这里ELF中提到的段仅是文件的分段与x86的段没有任何联系。

/usr/src/linux/include/linux/elf.htypedef struct elf32_phdr{Elf32_Word p_type;Elf32_Off p_offset;Elf32_Addr p_vaddr;Elf32_Addr p_paddr;Elf32_Word p_filesz;Elf32_Word p_memsz;Elf32_Word p_flags;Elf32_Word p_align;} Elf32_Phdr;Elf32_Phdr->p_type段的类型,它能告诉我们这个段里存放着什么用途的数据。

此字段的值是在elf.h中定义了一些常量。

例如1(PT_LOAD)表示是可加载的段,这样的段将被读入程序的进程空间成为内存映像的一部分。

段的种类再不断增加,例如7(PT_TLS)在以前就没有定义,它表示用于线程局部存储。

Elf32_Phdr->p_flags段的属性。

它用每一个二进制位表示一种属,相应位为1表示含有相应的属性,为0表示不含那种属性。

其中最低位是可执行位,次低位是可写位,第三低位是可读位。

如果这个字段的最低三位同时为1那就表示这个段中的数据加载以后既可读也可写而且可执行的。

同样在elf.h文件中也定义了一此常量(PF_X、 PF_W、PF_R)来测试这个字段的属性,做为一个好习惯应该尽量使用这此常量。

Elf32_Phdr->p_offset该段在文件中的偏移。

这个偏移是相对于整个文件的。

Elf32_Phdr->p_vaddr该段加载后在进程空间中占用的内存起始地址。

Elf32_Phdr->p_paddr该段的物理地地址。

这个字段被忽略,因为在多数现代操作系统下物理地址是进程无法触及的。

Elf32_Phdr->p_filesz该段在文件中占用的字节大小。

有些段可能在文件中不存在但却占用一定的内存空间,此时这个字段为0。

Elf32_Phdr->p_memsz该段在内存中占用的字节大小。

有些段可能仅存在于文件中而不被加载到内存,此时这个字段为0。

Elf32_Phdr->p_align对齐。

现代操作系统都使用虚拟内存为进程序提供更大的空间,分页技术功不可没,页就成了最小的内存分配单位,不足一页的按一页算。

所以加载程序数据一般也从一页的起始地址开始,这就属于对齐。

尽管我给出了描述每个段信息的程序头结构,但我并不打算介绍任何一个具体类型的段所存储的内容,大多数情况下它们和节中保存的内容是一致的。

相关文档
最新文档