PE结构总览图
MZ头部
又称为DOS头部,该部分用于在DOS下加载可执行程序,是用IMAGE_DOS_HEADER来定义的。
DOS残留是一段简单的程序,主要用于输出“This program cannot be run in DOS mode.”类似的字符串。
存在DOS头部的原因,关键是为了该可执行程序可以兼容DOS系统。
PE头部
PE头部保存Windows系统可执行文件的重要信息。PE头部由IMAGE_NT_HEADERS来定义。PE头部的位置是不确定的,PE头部的位置由DOS头部的某个字段给出。
节表
程序的组织按照各属性的不同而被保存在不同的节中,在PE头部之后就是一个数组结构的节表。如果PE文件中有N个节,那么节表就是由N个IMAGE_SECTION_HEADER组成的数组。节表中存储了各个节的属性、位置等相关信息。
节表数据
真正的程序部分就保存在节数据中。节名称最大长度为8个字节,大于8个字节将被截取。节的划分是根据各组数据的属性划分的,每个节拥有共同的属性。