winnt.h) (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;

成员

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

指向代码部分开头(相对于映像基)的指针。

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_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
请勿绑定映像。
0x1000
保留。
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
0x2000
WDM 驱动程序。
0x4000
保留。
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
0x8000
映像是终端服务器感知的。

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)

另请参阅

IMAGE_DATA_DIRECTORY

ImageHlp 结构