PE可选头

紧跟着PE文件头的,是一个叫做PE可选头(Optional Header)的数据结构。这个数据结构被叫做可选头是因为某些PE格式文件,比如目标文件(.OBJ)没有这个数据结构。但是对于一个可执行文件或动态链接库来说,这个数据结构是必须的。可选头由4部分组成,

第一部分是一个PE可选头签名。通过检查这个签名,我们可以知道这是一个32位的可选头还是64位的可选头。我们现在只介绍32位的可选头。 对于32位的PE文件来说,这个签名是0x10b

紧跟签名的第二部分是一个标准COFF标准数据。再接下来的第三部分是Windows对COFF头所做的一些扩展。最后一部分是PE文件中一些重要数据结构(导入表,导出表等)的索引。

在WINNT.h中,我们可以看到这个可选头的C语法声明:

typedef struct _IMAGE_OPTIONAL_HEADER {
    //
    // Standard fields.
    //

    WORD    Magic;
    BYTE    MajorLinkerVersion;
    BYTE    MinorLinkerVersion;
    DWORD   SizeOfCode;
    DWORD   SizeOfInitializedData;
    DWORD   SizeOfUninitializedData;
    DWORD   AddressOfEntryPoint;
    DWORD   BaseOfCode;
    DWORD   BaseOfData;

    //
    // NT additional fields.
    //

    DWORD   ImageBase;
    DWORD   SectionAlignment;
    DWORD   FileAlignment;
    WORD    MajorOperatingSystemVersion;
    WORD    MinorOperatingSystemVersion;
    WORD    MajorImageVersion;
    WORD    MinorImageVersion;
    WORD    MajorSubsystemVersion;
    WORD    MinorSubsystemVersion;
    DWORD   Win32VersionValue;
    DWORD   SizeOfImage;
    DWORD   SizeOfHeaders;
    DWORD   CheckSum;
    WORD    Subsystem;
    WORD    DllCharacteristics;
    DWORD   SizeOfStackReserve;
    DWORD   SizeOfStackCommit;
    DWORD   SizeOfHeapReserve;
    DWORD   SizeOfHeapCommit;
    DWORD   LoaderFlags;
    DWORD   NumberOfRvaAndSizes;
    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

下面我们来看下这里最主要的几个字段。

Field

Description

Magic

一般 0x10b

SizeOfCode

段大

SizeOfInitializedData

初始化的数据大

SizeOfUninitializedData

未初始化数据大

AddressOfEntryPoint

程序入口点 .

BaseOfCode

段在文件中的起始位

 

Field

Description

ImageBase

文件基地址 ,必须 64K 对齐 . 假如应用程序被加载到这个地址,就不需要重定位了。

Win32VersionValue

Reserved, must be zero.

Subsystem

运行该程序需要的环境子系统

DllCharacteristics

DLL 属性

SizeOfStackReserve

默认堆栈大小

SizeOfHeapReserve

默认堆大小

NumberOfRvaAndSizes

数据目录表大小。(下一篇会描述)


环境子系统常量定义

Constant

Value

Description

IMAGE_SUBSYSTEM_UNKNOWN

  0

未知子系统

IMAGE_SUBSYSTEM_NATIVE

  1

Windows 驱动程序

IMAGE_SUBSYSTEM_WINDOWS_GUI

  2

WIN32 GUI

IMAGE_SUBSYSTEM_WINDOWS_CUI

  3

WIN32 控制台

IMAGE_SUBSYSTEM_POSIX_CUI

  7

POSIX

IMAGE_SUBSYSTEM_WINDOWS_CE_GUI

  9

Windows CE

IMAGE_SUBSYSTEM_XBOX

14

XBOX


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值