共用方式為


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,但 Windows CE 0x00010000。

SectionAlignment

記憶體中載入之區段的對齊方式,以位元組為單位。 此值必須大於或等於 FileAlignment 成員。 預設值為系統的頁面大小。

FileAlignment

圖像檔案中區段的原始數據對齊方式,以位元組為單位。 此值應該是介於 512 到 64K (內含) 之間的 2 冪。 預設值為 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
強制進行程式代碼完整性檢查。 如果您設定此旗標且區段只包含未初始化的數據,請將該區段的 PointerToRawData 成員設定為零 IMAGE_SECTION_HEADER ;否則,映像將無法載入,因為無法驗證數字簽名。
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 結構