读书-程序员的自我修养-链接、封装与库(12: 第五章:windows PE/COFF
读书-程序员的自我修养-链接、封装与库(12: 第五章:windows PE/COFF) windows PE/COFF
windows PE/COFF
1. windows的二进制文件格式PE/COFF
- 在32位windows平台下,微软引入了一种叫做PE(Protable Executable)的可执行格式。
- 它源自于DEC公司的VAX,其实就是COFF的变种
- 在64位windows中,PE为PE32+,其实还是PE的延伸。
- PE 也是采用那种段的格式,与ELF类似。
2 PE的前身-COFF
- COFF 与 ELF格式类似,包含两个部分
一个是描述文件总体结构和属性的映像头
一个是描述该文件中包含的段属性的段表 - 映像(image)
因为PE文件在装载时直接被映射到进程的虚拟空间中运行,
它是进程的虚拟空间的映像。
所以PE可执行文件很多时候被叫做映像文件(Image File)。 - COFF 目标文件格式(图示)
3. 链接指示信息
COFF 中的 .drectve 段(实际上是Directive的缩写),它的内容是编译器传递给连接器的指令,即编译器希望告诉连接器应该怎样链接这个目标文件。
4. 调试信息
COFF 文件中所有以 .debug 开始的段都包含着调试信息。
5. 大家都有符号表
COFF 文件的符号表包含的内容几乎跟ELF一样,主要就是符号名,符号类型,所在的位置。
6. windows下的ELF-PE
PE 文件是基于 COFF 的扩展,它比 COFF 文件多了几个结构。
主要变化如下:
- 文件最开始部分不是COFF文件头,而是 DOS MZ 可执行文件格式的文件头和桩代码;
- 原来的 COFF 文件头中的 IMAGE_FILE_HEADER 部分扩展成了PE文件头结构。
PE文件格式如下图所示: