IMAGE_OPTIONAL_HEADER32 结构 (winnt.h)
表示可选的标头格式。
语法
typedef struct _IMAGE_OPTIONAL_HEADER {
WORD Magic;
BYTE MajorLinkerVersion;
BYTE MinorLinkerVersion;
DWORD SizeOfCode;
DWORD SizeOfInitializedData;
DWORD SizeOfUninitializedData;
DWORD AddressOfEntryPoint;
DWORD BaseOfCode;
DWORD BaseOfData;
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;
成员
Magic
图像文件的状态。 此成员可以是以下值之一。
MajorLinkerVersion
链接器的主版本号。
MinorLinkerVersion
链接器次要版本号。
SizeOfCode
代码节的大小(以字节为单位),如果有多个代码节,则为所有此类节的总和。
SizeOfInitializedData
初始化的数据节的大小(以字节为单位),如果有多个已初始化的数据节,则为所有此类节的总和。
SizeOfUninitializedData
未初始化的数据节的大小(以字节为单位),如果有多个未初始化的数据节,则为所有此类节的总和。
AddressOfEntryPoint
指向入口点函数(相对于图像基址)的指针。 对于可执行文件,这是起始地址。 对于设备驱动程序,这是初始化函数的地址。 入口点函数对于 DLL 是可选的。 如果没有入口点,则此成员为零。
BaseOfCode
指向代码部分开头(相对于映像基)的指针。
BaseOfData
指向数据部分开头(相对于映像基)的指针。
ImageBase
图像加载到内存中的第一个字节的首选地址。 此值是 64K 字节的倍数。 DLL 的默认值为 0x10000000。 应用程序的默认值为 0x00400000,0x00010000 Windows CE除外。
SectionAlignment
内存中加载的节的对齐方式(以字节为单位)。 此值必须大于或等于 FileAlignment 成员。 默认值为系统的页面大小。
FileAlignment
图像文件中各部分的原始数据的对齐方式(以字节为单位)。 该值的幂应介于 512 和 64K 之间, (包含) 。 默认值为 512。 如果 SectionAlignment 成员小于系统页面大小,则此成员必须与 SectionAlignment 相同。
MajorOperatingSystemVersion
所需操作系统的主版本号。
MinorOperatingSystemVersion
所需操作系统的次要版本号。
MajorImageVersion
映像的主版本号。
MinorImageVersion
映像的次要版本号。
MajorSubsystemVersion
子系统的主版本号。
MinorSubsystemVersion
子系统的次要版本号。
Win32VersionValue
此成员为保留成员,必须为 0。
SizeOfImage
图像的大小(以字节为单位),包括所有标头。 必须是 SectionAlignment 的倍数。
SizeOfHeaders
以下项的组合大小,舍入为 FileAlignment 成员中指定的值的倍数。
- IMAGE_DOS_HEADER 的e_lfanew成员
- 4 字节签名
- IMAGE_FILE_HEADER 的大小
- 可选标头的大小
- 所有节标题的大小
CheckSum
映像文件校验和。 以下文件在加载时进行验证:所有驱动程序、在启动时加载的任何 DLL,以及加载到关键系统进程中的任何 DLL。
Subsystem
运行此映像所需的子系统。 定义了以下值。
DllCharacteristics
映像的 DLL 特征。 定义了以下值。
值 | 含义 |
---|---|
|
保留。 |
|
保留。 |
|
保留。 |
|
保留。 |
|
具有 64 位地址空间的 ASLR。 |
|
可以在加载时重定位 DLL。 |
|
强制进行代码完整性检查。 如果设置此标志,并且某个节仅包含未初始化的数据,请将该节IMAGE_SECTION_HEADER的 PointerToRawData 成员设置为零;否则,无法加载映像,因为无法验证数字签名。 |
|
该映像与 DEP) (数据执行防护兼容。 |
|
映像是隔离感知的,但不应隔离。 |
|
映像不使用结构化异常处理 (SEH) 。 不能在此映像中调用任何处理程序。 |
|
请勿绑定映像。 |
|
图像应在 AppContainer 中执行。 |
|
WDM 驱动程序。 |
|
映像支持控制流防护。 |
|
映像可识别终端服务器。 |
SizeOfStackReserve
要为堆栈保留的字节数。 加载时仅提交 由 SizeOfStackCommit 成员指定的内存;其余部分一次提供一页,直到达到此保留大小。
SizeOfStackCommit
要为堆栈提交的字节数。
SizeOfHeapReserve
要为本地堆保留的字节数。 加载时仅提交 由 SizeOfHeapCommit 成员指定的内存;其余部分一次提供一页,直到达到此保留大小。
SizeOfHeapCommit
要为本地堆提交的字节数。
LoaderFlags
此成员已过时。
NumberOfRvaAndSizes
可选标头其余部分的目录条目数。 每个条目都描述位置和大小。
DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]
指向数据目录中第一 个IMAGE_DATA_DIRECTORY 结构的指针。
所需目录项的索引号。 此参数的取值可为下列值之一:
注解
目录数不是固定的。 在查找特定目录之前,请检查 NumberOfRvaAndSizes 成员。
WinNT.h 中的实际 结构IMAGE_OPTIONAL_HEADER32命名 , IMAGE_OPTIONAL_HEADER 定义为 IMAGE_OPTIONAL_HEADER32。 但是,如果定义了 _WIN64 ,则 IMAGE_OPTIONAL_HEADER 定义为 IMAGE_OPTIONAL_HEADER64。
typedef struct _IMAGE_OPTIONAL_HEADER64 {
WORD Magic;
BYTE MajorLinkerVersion;
BYTE MinorLinkerVersion;
DWORD SizeOfCode;
DWORD SizeOfInitializedData;
DWORD SizeOfUninitializedData;
DWORD AddressOfEntryPoint;
DWORD BaseOfCode;
ULONGLONG 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;
ULONGLONG SizeOfStackReserve;
ULONGLONG SizeOfStackCommit;
ULONGLONG SizeOfHeapReserve;
ULONGLONG SizeOfHeapCommit;
DWORD LoaderFlags;
DWORD NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | winnt.h (包括 Windows.h) |