Condividi tramite


struttura IMAGE_OPTIONAL_HEADER32 (winnt.h)

Rappresenta il formato di intestazione facoltativo.

Sintassi

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;

Members

Magic

Stato del file di immagine. Questo membro può essere uno dei valori seguenti.

Valore Significato
IMAGE_NT_OPTIONAL_HDR_MAGIC
Il file è un'immagine eseguibile. Questo valore viene definito come IMAGE_NT_OPTIONAL_HDR32_MAGIC in un'applicazione a 32 bit e come IMAGE_NT_OPTIONAL_HDR64_MAGIC in un'applicazione a 64 bit.
IMAGE_NT_OPTIONAL_HDR32_MAGIC
0x10b
Il file è un'immagine eseguibile.
IMAGE_NT_OPTIONAL_HDR64_MAGIC
0x20b
Il file è un'immagine eseguibile.
IMAGE_ROM_OPTIONAL_HDR_MAGIC
0x107
Il file è un'immagine ROM.

MajorLinkerVersion

Numero di versione principale del linker.

MinorLinkerVersion

Numero di versione secondaria del linker.

SizeOfCode

Dimensioni della sezione del codice, in byte, o somma di tutte queste sezioni, se sono presenti più sezioni di codice.

SizeOfInitializedData

Dimensioni della sezione dei dati inizializzati, in byte o somma di tutte le sezioni di questo tipo, se sono presenti più sezioni di dati inizializzate.

SizeOfUninitializedData

Dimensioni della sezione dati non inizializzata, in byte, o della somma di tutte queste sezioni se sono presenti più sezioni di dati non inizializzate.

AddressOfEntryPoint

Puntatore alla funzione del punto di ingresso, rispetto all'indirizzo di base dell'immagine. Per i file eseguibili, questo è l'indirizzo iniziale. Per i driver di dispositivo, si tratta dell'indirizzo della funzione di inizializzazione. La funzione del punto di ingresso è facoltativa per le DLL. Quando non è presente alcun punto di ingresso, questo membro è zero.

BaseOfCode

Puntatore all'inizio della sezione del codice, rispetto alla base dell'immagine.

BaseOfData

Puntatore all'inizio della sezione dei dati, rispetto alla base dell'immagine.

ImageBase

Indirizzo preferito del primo byte dell'immagine quando viene caricato in memoria. Questo valore è un multiplo di 64 KB di byte. Il valore predefinito per le DLL è 0x10000000. Il valore predefinito per le applicazioni è 0x00400000, ad eccezione di Windows CE in cui è 0x00010000.

SectionAlignment

Allineamento delle sezioni caricate in memoria, in byte. Questo valore deve essere maggiore o uguale al membro FileAlignment . Il valore predefinito è la dimensione della pagina per il sistema.

FileAlignment

Allineamento dei dati non elaborati delle sezioni nel file di immagine, in byte. Il valore deve essere una potenza di 2 tra 512 e 64.000 (inclusi). Il valore predefinito è 512. Se il membro SectionAlignment è minore delle dimensioni della pagina di sistema, questo membro deve essere uguale a SectionAlignment.

MajorOperatingSystemVersion

Numero di versione principale del sistema operativo richiesto.

MinorOperatingSystemVersion

Numero di versione secondaria del sistema operativo richiesto.

MajorImageVersion

Numero di versione principale dell'immagine.

MinorImageVersion

Numero di versione secondaria dell'immagine.

MajorSubsystemVersion

Numero di versione principale del sottosistema.

MinorSubsystemVersion

Numero di versione secondaria del sottosistema.

Win32VersionValue

Questo membro è riservato e deve essere 0.

SizeOfImage

Dimensioni dell'immagine, in byte, incluse tutte le intestazioni. Deve essere un multiplo di SectionAlignment.

SizeOfHeaders

Dimensione combinata degli elementi seguenti, arrotondata a un multiplo del valore specificato nel membro FileAlignment .

  • e_lfanew membro di IMAGE_DOS_HEADER
  • 4 byte signature
  • dimensioni di IMAGE_FILE_HEADER
  • dimensioni dell'intestazione facoltativa
  • dimensioni di tutte le intestazioni di sezione

CheckSum

Checksum del file di immagine. I file seguenti vengono convalidati in fase di caricamento: tutti i driver, qualsiasi DLL caricata in fase di avvio e qualsiasi DLL caricata in un processo di sistema critico.

Subsystem

Sottosistema necessario per eseguire questa immagine. Vengono definiti i valori seguenti.

Valore Significato
IMAGE_SUBSYSTEM_UNKNOWN
0
Sottosistema sconosciuto.
IMAGE_SUBSYSTEM_NATIVE
1
Nessun sottosistema necessario (driver di dispositivo e processi di sistema nativi).
IMAGE_SUBSYSTEM_WINDOWS_GUI
2
Sottosistema interfaccia utente grafica (GUI) di Windows.
IMAGE_SUBSYSTEM_WINDOWS_CUI
3
Sottosistema DELL'interfaccia utente (CUI) in modalità carattere di Windows.
IMAGE_SUBSYSTEM_OS2_CUI
5
Sottosistema DEL SISTEMA OPERATIVO/2.
IMAGE_SUBSYSTEM_POSIX_CUI
7
Sottosistema POSIX CUI.
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI
9
Windows CE sistema.
IMAGE_SUBSYSTEM_EFI_APPLICATION
10
Applicazione EFI (Extensible Firmware Interface).
IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
11
Driver EFI con servizi di avvio.
IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
12
Driver EFI con servizi di runtime.
IMAGE_SUBSYSTEM_EFI_ROM
13
Immagine ROM di EFI.
IMAGE_SUBSYSTEM_XBOX
14
Sistema Xbox.
IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION
16
Applicazione di avvio.

DllCharacteristics

Caratteristiche dll dell'immagine. Vengono definiti i valori seguenti.

Valore Significato
0x0001
Riservato.
0x0002
Riservato.
0x0004
Riservato.
0x0008
Riservato.
IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
0x0020
ASLR con spazio indirizzi a 64 bit.
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
0x0040
La DLL può essere rilocata in fase di caricamento.
IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
0x0080
I controlli di integrità del codice sono forzati. Se si imposta questo flag e una sezione contiene solo dati non inizializzati, impostare il membro PointerToRawData di IMAGE_SECTION_HEADER per tale sezione su zero; in caso contrario, l'immagine non verrà caricata perché non è possibile verificare la firma digitale.
IMAGE_DLLCHARACTERISTICS_NX_COMPAT
0x0100
L'immagine è compatibile con la prevenzione dell'esecuzione dei dati (DEP).
IMAGE_DLLCHARACTERISTICS_NO_ISOLATION
0x0200
L'immagine è compatibile con l'isolamento, ma non deve essere isolata.
IMAGE_DLLCHARACTERISTICS_NO_SEH
0x0400
L'immagine non usa la gestione delle eccezioni strutturata (SEH). Nessun gestore può essere chiamato in questa immagine.
IMAGE_DLLCHARACTERISTICS_NO_BIND
0x0800
Non associare l'immagine.
IMAGE_DLL_CHARACTERISTICS_APPCONTAINER
0x1000
L'immagine deve essere eseguita in un oggetto AppContainer.
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
0x2000
Driver WDM.
IMAGE_DLL_CHARACTERISTICS_GUARD_CF
0x4000
Image supporta La protezione del flusso di controllo.
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
0x8000
L'immagine è compatibile con il server terminal.

SizeOfStackReserve

Numero di byte da riservare per lo stack. Solo la memoria specificata dal membro SizeOfStackCommit viene sottoposta a commit in fase di caricamento; il resto viene reso disponibile una pagina alla volta fino a raggiungere questa dimensione di riserva.

SizeOfStackCommit

Numero di byte di cui eseguire il commit per lo stack.

SizeOfHeapReserve

Numero di byte da riservare per l'heap locale. Solo la memoria specificata dal membro SizeOfHeapCommit viene sottoposta a commit in fase di caricamento; il resto viene reso disponibile una pagina alla volta fino a raggiungere questa dimensione di riserva.

SizeOfHeapCommit

Numero di byte di cui eseguire il commit per l'heap locale.

LoaderFlags

Questo membro è obsoleto.

NumberOfRvaAndSizes

Numero di voci di directory nella parte restante dell'intestazione facoltativa. Ogni voce descrive una posizione e una dimensione.

DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]

Puntatore alla prima struttura IMAGE_DATA_DIRECTORY nella directory dei dati.

Numero di indice della voce di directory desiderata. Questo parametro può avere uno dei valori seguenti.

Valore Significato
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE
7
Dati specifici dell'architettura
IMAGE_DIRECTORY_ENTRY_BASERELOC
5
Tabella di rilocazione di base
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
11
Directory di importazione associata
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR
14
Tabella del descrittore COM
IMAGE_DIRECTORY_ENTRY_DEBUG
6
Directory di debug
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
13
Tabella di importazione ritardata
IMAGE_DIRECTORY_ENTRY_EXCEPTION
3
Directory eccezioni
IMAGE_DIRECTORY_ENTRY_EXPORT
0
Esporta directory
IMAGE_DIRECTORY_ENTRY_GLOBALPTR
8
Indirizzo virtuale relativo del puntatore globale
IMAGE_DIRECTORY_ENTRY_IAT
12
Importare la tabella degli indirizzi
IMAGE_DIRECTORY_ENTRY_IMPORT
1
Importa directory
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
10
Caricare la directory di configurazione
IMAGE_DIRECTORY_ENTRY_RESOURCE
2
Directory delle risorse
IMAGE_DIRECTORY_ENTRY_SECURITY
4
Directory di sicurezza
IMAGE_DIRECTORY_ENTRY_TLS
9
Directory di archiviazione locale thread

Commenti

Il numero di directory non è fisso. Controllare il membro NumberOfRvaAndSizes prima di cercare una directory specifica.

La struttura effettiva in WinNT.h è denominata IMAGE_OPTIONAL_HEADER32 e IMAGE_OPTIONAL_HEADER viene definita come IMAGE_OPTIONAL_HEADER32. Tuttavia, se _WIN64 è definito, IMAGE_OPTIONAL_HEADER viene definito come 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;

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Intestazione winnt.h (include Windows.h)

Vedi anche

IMAGE_DATA_DIRECTORY

Strutture ImageHlp