Freigeben über


IMAGE_OPTIONAL_HEADER32-Struktur (winnt.h)

Stellt das optionale Headerformat dar.

Syntax

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;

Member

Magic

Der Status der Imagedatei. Dieser Member kann einer der folgenden Werte sein.

Wert Bedeutung
IMAGE_NT_OPTIONAL_HDR_MAGIC
Die Datei ist ein ausführbares Image. Dieser Wert wird als IMAGE_NT_OPTIONAL_HDR32_MAGIC in einer 32-Bit-Anwendung und als IMAGE_NT_OPTIONAL_HDR64_MAGIC in einer 64-Bit-Anwendung definiert.
IMAGE_NT_OPTIONAL_HDR32_MAGIC
0x10b
Die Datei ist ein ausführbares Image.
IMAGE_NT_OPTIONAL_HDR64_MAGIC
0x20b
Die Datei ist ein ausführbares Image.
IMAGE_ROM_OPTIONAL_HDR_MAGIC
0x107
Die Datei ist ein ROM-Image.

MajorLinkerVersion

Die Hauptversionsnummer des Linkers.

MinorLinkerVersion

Die Nebenversionsnummer des Linkers.

SizeOfCode

Die Größe des Codeabschnitts in Bytes oder die Summe aller abschnitte, wenn mehrere Codeabschnitte vorhanden sind.

SizeOfInitializedData

Die Größe des initialisierten Datenabschnitts in Bytes oder die Summe aller dieser Abschnitte, wenn mehrere initialisierte Datenabschnitte vorhanden sind.

SizeOfUninitializedData

Die Größe des nicht initialisierten Datenabschnitts in Bytes oder die Summe aller abschnitte, wenn mehrere nicht initialisierte Datenabschnitte vorhanden sind.

AddressOfEntryPoint

Ein Zeiger auf die Einstiegspunktfunktion relativ zur Bildbasisadresse. Bei ausführbaren Dateien ist dies die Startadresse. Bei Gerätetreibern ist dies die Adresse der Initialisierungsfunktion. Die Einstiegspunktfunktion ist für DLLs optional. Wenn kein Einstiegspunkt vorhanden ist, ist dieser Member 0.

BaseOfCode

Ein Zeiger auf den Anfang des Codeabschnitts relativ zur Bildbasis.

BaseOfData

Ein Zeiger auf den Anfang des Datenabschnitts relativ zur Bildbasis.

ImageBase

Die bevorzugte Adresse des ersten Byte des Images, wenn es in den Arbeitsspeicher geladen wird. Dieser Wert ist ein Vielfaches von 64.000 Bytes. Der Standardwert für DLLs ist 0x10000000. Der Standardwert für Anwendungen ist 0x00400000, mit Ausnahme von Windows CE, in denen er 0x00010000 ist.

SectionAlignment

Die Ausrichtung von Abschnitten, die in den Arbeitsspeicher geladen werden, in Bytes. Dieser Wert muss größer oder gleich dem FileAlignment-Member sein. Der Standardwert ist die Seitengröße für das System.

FileAlignment

Die Ausrichtung der Rohdaten von Abschnitten in der Bilddatei in Bytes. Der Wert sollte eine Leistung von 2 zwischen 512 und 64 K (einschließlich) aufweisen. Der Standardwert liegt bei 512. Wenn der SectionAlignment-Member kleiner als die Systemseitengröße ist, muss dieser Member mit SectionAlignment identisch sein.

MajorOperatingSystemVersion

Die Hauptversionsnummer des erforderlichen Betriebssystems.

MinorOperatingSystemVersion

Die Nebenversionsnummer des erforderlichen Betriebssystems.

MajorImageVersion

Die Hauptversionsnummer des Images.

MinorImageVersion

Die Nebenversionsnummer des Images.

MajorSubsystemVersion

Die Hauptversionsnummer des Subsystems.

MinorSubsystemVersion

Die Nebenversionsnummer des Subsystems.

Win32VersionValue

Dieser Member ist reserviert und muss 0 sein.

SizeOfImage

Die Größe des Bilds in Bytes, einschließlich aller Header. Muss ein Vielfaches von SectionAlignment sein.

SizeOfHeaders

Die kombinierte Größe der folgenden Elemente, gerundet auf ein Vielfaches des im FileAlignment-Member angegebenen Werts .

  • e_lfanew Mitglied der IMAGE_DOS_HEADER
  • 4-Byte-Signatur
  • Größe der IMAGE_FILE_HEADER
  • Größe des optionalen Headers
  • Größe aller Abschnittsheader

CheckSum

Die Prüfsumme der Imagedatei. Die folgenden Dateien werden zur Ladezeit überprüft: alle Treiber, jede DLL, die zur Startzeit geladen wurde, und jede DLL, die in einen kritischen Systemprozess geladen wurde.

Subsystem

Das Subsystem, das zum Ausführen dieses Images erforderlich ist. Die folgenden Werte werden definiert.

Wert Bedeutung
IMAGE_SUBSYSTEM_UNKNOWN
0
Unbekanntes Subsystem.
IMAGE_SUBSYSTEM_NATIVE
1
Kein Subsystem erforderlich (Gerätetreiber und systemeigene Systemprozesse).
IMAGE_SUBSYSTEM_WINDOWS_GUI
2
Windows-Subsystem für grafische Benutzeroberfläche (GUI).
IMAGE_SUBSYSTEM_WINDOWS_CUI
3
Windows-Zeichenmodus-Benutzeroberfläche (CUI)-Subsystem.
IMAGE_SUBSYSTEM_OS2_CUI
5
OS/2 CUI-Subsystem.
IMAGE_SUBSYSTEM_POSIX_CUI
7
POSIX CUI-Subsystem.
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI
9
Windows CE System.
IMAGE_SUBSYSTEM_EFI_APPLICATION
10
EFI-Anwendung (Extensible Firmware Interface).
IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
11
EFI-Treiber mit Startdiensten.
IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
12
EFI-Treiber mit Laufzeitdiensten.
IMAGE_SUBSYSTEM_EFI_ROM
13
EFI-ROM-Image.
IMAGE_SUBSYSTEM_XBOX
14
Xbox-System.
IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION
16
Startanwendung.

DllCharacteristics

Die DLL-Merkmale des Bilds. Die folgenden Werte werden definiert.

Wert Bedeutung
0x0001
Reserviert.
0x0002
Reserviert.
0x0004
Reserviert.
0x0008
Reserviert.
IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
0x0020
ASLR mit 64-Bit-Adressraum.
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
0x0040
Die DLL kann zur Ladezeit verschoben werden.
IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
0x0080
Codeintegritätsprüfungen werden erzwungen. Wenn Sie dieses Flag festlegen und ein Abschnitt nur nicht initialisierte Daten enthält, legen Sie den PointerToRawData-Member von IMAGE_SECTION_HEADER für diesen Abschnitt auf Null fest. Andernfalls kann das Image nicht geladen werden, da die digitale Signatur nicht überprüft werden kann.
IMAGE_DLLCHARACTERISTICS_NX_COMPAT
0x0100
Das Image ist mit der Datenausführungsprävention (Data Execution Prevention, DEP) kompatibel.
IMAGE_DLLCHARACTERISTICS_NO_ISOLATION
0x0200
Das Image ist isolationsbewusst, sollte aber nicht isoliert werden.
IMAGE_DLLCHARACTERISTICS_NO_SEH
0x0400
Das Bild verwendet keine strukturierte Ausnahmebehandlung (STRUCTURED EXCEPTION HANDLING, SEH). In diesem Image können keine Handler aufgerufen werden.
IMAGE_DLLCHARACTERISTICS_NO_BIND
0x0800
Binden Sie das Image nicht.
IMAGE_DLL_CHARACTERISTICS_APPCONTAINER
0x1000
Das Image sollte in einem AppContainer ausgeführt werden.
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
0x2000
Ein WDM-Treiber.
IMAGE_DLL_CHARACTERISTICS_GUARD_CF
0x4000
Das Image unterstützt den Ablaufsteuerungsschutz (Control Flow Guard, CFG).
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
0x8000
Das Image ist terminalserverfähig.

SizeOfStackReserve

Die Anzahl der Bytes, die für den Stapel reserviert werden sollen. Nur der vom SizeOfStackCommit-Member angegebene Arbeitsspeicher wird zur Ladezeit committet. der Rest wird eine Seite nach dem anderen zur Verfügung gestellt, bis diese Reservegröße erreicht ist.

SizeOfStackCommit

Die Anzahl der Bytes, die für den Stapel committ werden sollen.

SizeOfHeapReserve

Die Anzahl der Bytes, die für den lokalen Heap reserviert werden sollen. Nur der vom SizeOfHeapCommit-Member angegebene Arbeitsspeicher wird zur Ladezeit committet. der Rest wird eine Seite nach dem anderen zur Verfügung gestellt, bis diese Reservegröße erreicht ist.

SizeOfHeapCommit

Die Anzahl der Bytes, die für den lokalen Heap committ werden sollen.

LoaderFlags

Dieser Member ist veraltet.

NumberOfRvaAndSizes

Die Anzahl der Verzeichniseinträge im rest des optionalen Headers. Jeder Eintrag beschreibt einen Standort und eine Größe.

DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]

Ein Zeiger auf die erste IMAGE_DATA_DIRECTORY Struktur im Datenverzeichnis.

Die Indexnummer des gewünschten Verzeichniseintrags. Dieser Parameter kann einen der folgenden Werte annehmen.

Wert Bedeutung
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE
7
Architekturspezifische Daten
IMAGE_DIRECTORY_ENTRY_BASERELOC
5
Basis-Umlagerungstabelle
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
11
Gebundenes Importverzeichnis
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR
14
COM-Deskriptortabelle
IMAGE_DIRECTORY_ENTRY_DEBUG
6
Debugverzeichnis
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
13
Tabelle "Verzögerter Import"
IMAGE_DIRECTORY_ENTRY_EXCEPTION
3
Ausnahmeverzeichnis
IMAGE_DIRECTORY_ENTRY_EXPORT
0
Verzeichnis exportieren
IMAGE_DIRECTORY_ENTRY_GLOBALPTR
8
Die relative virtuelle Adresse des globalen Zeigers
IMAGE_DIRECTORY_ENTRY_IAT
12
Importieren der Adresstabelle
IMAGE_DIRECTORY_ENTRY_IMPORT
1
Verzeichnis importieren
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
10
Laden des Konfigurationsverzeichnisses
IMAGE_DIRECTORY_ENTRY_RESOURCE
2
Ressourcenverzeichnis
IMAGE_DIRECTORY_ENTRY_SECURITY
4
Sicherheitsverzeichnis
IMAGE_DIRECTORY_ENTRY_TLS
9
Lokales Threadspeicherverzeichnis

Hinweise

Die Anzahl der Verzeichnisse ist nicht festgelegt. Überprüfen Sie das NumberOfRvaAndSizes-Element , bevor Sie nach einem bestimmten Verzeichnis suchen.

Die tatsächliche Struktur in WinNT.h heißt IMAGE_OPTIONAL_HEADER32 und IMAGE_OPTIONAL_HEADER wird als IMAGE_OPTIONAL_HEADER32 definiert. Wenn jedoch _WIN64 definiert ist, wird IMAGE_OPTIONAL_HEADER als IMAGE_OPTIONAL_HEADER64 definiert.

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;

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Kopfzeile winnt.h (Einschließen von Windows.h)

Weitere Informationen

IMAGE_DATA_DIRECTORY

ImageHlp-Strukturen