一、ELF简介
现在PC平台流行的可执行文件格式主要是Windows下的PE(portable Executable)和Linux的ELF(Excutable Linkable Format)。
编译器编译源代码后生成的文件叫做目标文件,从目标文件的结构上讲,
它是已经编译后的可执行文件格式,只是还没有链接的过程,其中可能有些符号或有些地址还没有被调整。其实它本身就是按照可执行文件格式存储的,只是跟真正的可执行文件在结构上稍有不同。
简单的说,目标文件就是源代码编译后但未进行链接的那些中间文件(Winodws的.obj和Linux下的.o) ,它跟可执行文件的内容结构很相似,所以一般跟可执行文件格式一起采用一种格式存储。从某种意义上,可以把目标文件和可执行文件看成是一种类型的文件。在Windows下,称之为PE-COEF文件格式,在Linux下,称之为ELF文件。
另外,不光是可执行文件(.exe、elf)按照可执行文件格式存储,动态链接库.dll(windows)、.so(linux)以及静态连接库(.lib(windows)、.a(linux))文件都按可执行文件格式存储。
二、ELF结构
2.1一般目标文件将符号表、调试信息、字符串等一些链接时所须要的信息,以“节”(Section)的形式存储,有时候也叫“段”(Segment),通常不加区别。
-代码段(Code Section):存放源代码编译后的机器指令
- 代码段常见的名字:".code" ".text"
-数据段(Data Section) : 存放全局变量和局部静态变量
- 数据段常见的名字:“.data”,".rodata",".comment",".bss"