读书-程序员的自我修养-链接、封装与库(12: 第五章:windows PE/COFF

读书-程序员的自我修养-链接、封装与库(12: 第五章:windows PE/COFF) windows PE/COFF


windows PE/COFF

1. windows的二进制文件格式PE/COFF

  1. 在32位windows平台下,微软引入了一种叫做PE(Protable Executable)的可执行格式。
  2. 它源自于DEC公司的VAX,其实就是COFF的变种
  3. 在64位windows中,PE为PE32+,其实还是PE的延伸。
  4. PE 也是采用那种段的格式,与ELF类似。

2 PE的前身-COFF

  1. COFF 与 ELF格式类似,包含两个部分
    一个是描述文件总体结构和属性的映像头
    一个是描述该文件中包含的段属性的段表
  2. 映像(image)
    因为PE文件在装载时直接被映射到进程的虚拟空间中运行,
    它是进程的虚拟空间的映像。
    所以PE可执行文件很多时候被叫做映像文件(Image File)。
  3. COFF 目标文件格式(图示)
    读书-程序员的自我修养-链接、封装与库(12: 第五章:windows PE/COFF

3. 链接指示信息

COFF 中的 .drectve 段(实际上是Directive的缩写),它的内容是编译器传递给连接器的指令,即编译器希望告诉连接器应该怎样链接这个目标文件。

4. 调试信息

COFF 文件中所有以 .debug 开始的段都包含着调试信息。
读书-程序员的自我修养-链接、封装与库(12: 第五章:windows PE/COFF

5. 大家都有符号表

COFF 文件的符号表包含的内容几乎跟ELF一样,主要就是符号名,符号类型,所在的位置。

6. windows下的ELF-PE

PE 文件是基于 COFF 的扩展,它比 COFF 文件多了几个结构。
主要变化如下:

  1. 文件最开始部分不是COFF文件头,而是 DOS MZ 可执行文件格式的文件头和桩代码;
  2. 原来的 COFF 文件头中的 IMAGE_FILE_HEADER 部分扩展成了PE文件头结构。

PE文件格式如下图所示:
读书-程序员的自我修养-链接、封装与库(12: 第五章:windows PE/COFF