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

图像文件的状态。 此成员可以是以下值之一。

含义
IMAGE_NT_OPTIONAL_HDR_MAGIC
该文件是可执行映像。 此值在 32 位应用程序中定义为 IMAGE_NT_OPTIONAL_HDR32_MAGIC ,在 64 位应用程序中 定义为IMAGE_NT_OPTIONAL_HDR64_MAGIC
IMAGE_NT_OPTIONAL_HDR32_MAGIC
0x10b
该文件是可执行映像。
IMAGE_NT_OPTIONAL_HDR64_MAGIC
0x20b
该文件是可执行映像。
IMAGE_ROM_OPTIONAL_HDR_MAGIC
0x107
该文件是 ROM 映像。

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_HEADERe_lfanew成员
  • 4 字节签名
  • IMAGE_FILE_HEADER 的大小
  • 可选标头的大小
  • 所有节标题的大小

CheckSum

映像文件校验和。 以下文件在加载时进行验证:所有驱动程序、在启动时加载的任何 DLL,以及加载到关键系统进程中的任何 DLL。

Subsystem

运行此映像所需的子系统。 定义了以下值。

含义
IMAGE_SUBSYSTEM_UNKNOWN
0
未知子系统。
IMAGE_SUBSYSTEM_NATIVE
1
无需子系统 (设备驱动程序和本机系统进程) 。
IMAGE_SUBSYSTEM_WINDOWS_GUI
2
windows 图形用户界面 (GUI) 子系统。
IMAGE_SUBSYSTEM_WINDOWS_CUI
3
Windows 字符模式用户界面 (CUI) 子系统。
IMAGE_SUBSYSTEM_OS2_CUI
5
OS/2 CUI 子系统。
IMAGE_SUBSYSTEM_POSIX_CUI
7
POSIX CUI 子系统。
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI
9
Windows CE系统。
IMAGE_SUBSYSTEM_EFI_APPLICATION
10
可扩展固件接口 (EFI) 应用程序。
IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
11
具有启动服务的 EFI 驱动程序。
IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
12
具有运行时服务的 EFI 驱动程序。
IMAGE_SUBSYSTEM_EFI_ROM
13
EFI ROM 映像。
IMAGE_SUBSYSTEM_XBOX
14
Xbox 系统。
IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION
16
启动应用程序。

DllCharacteristics

映像的 DLL 特征。 定义了以下值。

含义
0x0001
保留。
0x0002
保留。
0x0004
保留。
0x0008
保留。
IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
0x0020
具有 64 位地址空间的 ASLR。
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
0x0040
可以在加载时重定位 DLL。
IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
0x0080
强制进行代码完整性检查。 如果设置此标志,并且某个节仅包含未初始化的数据,请将该节IMAGE_SECTION_HEADERPointerToRawData 成员设置为零;否则,无法加载映像,因为无法验证数字签名。
IMAGE_DLLCHARACTERISTICS_NX_COMPAT
0x0100
该映像与 DEP) (数据执行防护兼容。
IMAGE_DLLCHARACTERISTICS_NO_ISOLATION
0x0200
映像是隔离感知的,但不应隔离。
IMAGE_DLLCHARACTERISTICS_NO_SEH
0x0400
映像不使用结构化异常处理 (SEH) 。 不能在此映像中调用任何处理程序。
IMAGE_DLLCHARACTERISTICS_NO_BIND
0x0800
请勿绑定映像。
IMAGE_DLL_CHARACTERISTICS_APPCONTAINER
0x1000
图像应在 AppContainer 中执行。
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
0x2000
WDM 驱动程序。
IMAGE_DLL_CHARACTERISTICS_GUARD_CF
0x4000
映像支持控制流防护。
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
0x8000
映像可识别终端服务器。

SizeOfStackReserve

要为堆栈保留的字节数。 加载时仅提交 由 SizeOfStackCommit 成员指定的内存;其余部分一次提供一页,直到达到此保留大小。

SizeOfStackCommit

要为堆栈提交的字节数。

SizeOfHeapReserve

要为本地堆保留的字节数。 加载时仅提交 由 SizeOfHeapCommit 成员指定的内存;其余部分一次提供一页,直到达到此保留大小。

SizeOfHeapCommit

要为本地堆提交的字节数。

LoaderFlags

此成员已过时。

NumberOfRvaAndSizes

可选标头其余部分的目录条目数。 每个条目都描述位置和大小。

DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]

指向数据目录中第一 个IMAGE_DATA_DIRECTORY 结构的指针。

所需目录项的索引号。 此参数的取值可为下列值之一:

含义
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE
7
特定于体系结构的数据
IMAGE_DIRECTORY_ENTRY_BASERELOC
5
基本重定位表
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
11
绑定导入目录
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR
14
COM 描述符表
IMAGE_DIRECTORY_ENTRY_DEBUG
6
调试目录
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
13
延迟导入表
IMAGE_DIRECTORY_ENTRY_EXCEPTION
3
异常目录
IMAGE_DIRECTORY_ENTRY_EXPORT
0
导出目录
IMAGE_DIRECTORY_ENTRY_GLOBALPTR
8
全局指针的相对虚拟地址
IMAGE_DIRECTORY_ENTRY_IAT
12
导入地址表
IMAGE_DIRECTORY_ENTRY_IMPORT
1
导入目录
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
10
加载配置目录
IMAGE_DIRECTORY_ENTRY_RESOURCE
2
资源目录
IMAGE_DIRECTORY_ENTRY_SECURITY
4
安全目录
IMAGE_DIRECTORY_ENTRY_TLS
9
线程本地存储目录

注解

目录数不是固定的。 在查找特定目录之前,请检查 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)

另请参阅

IMAGE_DATA_DIRECTORY

ImageHlp 结构