4 PE的NT头
点击PEview左侧树形控件中的“IMAGE_NT_HEADERS”左侧的“+”,展开NT头结构,如图7所示。
图7 NT头结构
从图7中可以看到,NT头包括Signatrue、IMAGE_FILE_HEADER和IMAGE_OPTIONAL_HEADER三部分。
4.1 Signatrue
在图7中,选中“Signatrue”,在右侧显示了该部分的内容,如图8所示。
图8 Signatrue的值
从图8可以看出,Signatrue共4个字节,其值为0x00004550,即为字符串“PE”,因此Signatrue也叫做PE文件的文件签名,标志该文件的类型为PE。
4.2 IMAGE_FILE_HEADER
单击图7中的“IMAGE_FILE_HEADER”,在右侧可以看到该部分的内容,如图9所示。
图9 IMAGE_FILE_HEADER内容
从图9中可以看出,IMAGE_FILE_HEADER部分共20字节。其中0x000000EC-0x000000ED,这两个字节表示机器类型,用于标识CPU的类型,0x014C表示CPU为Intel 386或后继处理器及其兼容处理器;0x000000EE-0x000000EF表示节的数目,0x0009表示本应用程序有9个节(section),从图3左侧中可以看出,本应用程序确实有9个节(section);0x000000F4-0x000000FB这8个字节已经不再使用,因此将这8个字节都设置为0;0x000000FC-0x000000FD,这两个字节是IMAGE_OPTIONAL_HEADER,即NT头的第三部分的大小,其值为0x00E0;0x000000FE-0x000000FF,这两个字节指定了文件特征值,其值为0x0102,其16位的含义均不同。
4.3 IMAGE_OPTIONAL_HEADER
单击图7中的“IMAGE_OPTIONAL_HEADER”,在右侧可以看到该部分的内容,如图10所示。
图10 IMAGE_OPTIONAL_HEADER内容
从图10中可以看出,IMAGE_OPTIONAL_HEADER头由两部分组成,分别是0x0000012E-0x0000015F的参数部分和0x00000160-0x000001DF的数据目录部分。其中参数部分包含了产生该PE文件的连接器版本号、代码基地址、数据基地址、镜像基地址等信息;数据目录部分包含了导出表、导入目录表、资源表等地址和大小。