https://www.jianshu.com/p/35db9df2514f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
Windows的二进制文件格式PE/COFF
Win32平台下标准文件格式为PE,PE=Protable
Executable。
PE和ELF同根同源都是从COFF(Common Object File Format)发展而来。
PE的前身COFF
PE文件被装载时直接映射到进程虚拟空间中运行,它是进程虚拟空间的映像,所以PE很多时候被称为映像文件。
COFF文件结构和ELF文件结构大体相同,只是前者多了两个段——drectve段和debug$S段。
drectve很显然就是directive的某种缩写形式,而directive是指令的意思,因此它是编译器传递给链接器的链接指令。
在COFF中所有以debug开头的段都是调试信息段。
debug$S表示与符号相关的调试信息段。
还有其他段可参见P165。
与ELF不同的是COFF还会为字符串常量自动生成符号。
WINDOWS下的ELF——PE
PE比COFF多了两个主要的变化:
1、PE文件的开始部分是DOS MZ可执行文件格式的文件头和桩代码。
2、COFF格式中的IMAGE_FILE_HEADER被扩展成为IMAGE_NT_HEADERS。
DOS和WINDOWS下的可执行文件格式都是exe,但是DOS下的却是MZ格式。