estructura IMAGE_OPTIONAL_HEADER32 (winnt.h)

Representa el formato de encabezado opcional.

Sintaxis

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;

Miembros

Magic

Estado del archivo de imagen. Este miembro puede ser uno de los siguientes valores.

Valor Significado
IMAGE_NT_OPTIONAL_HDR_MAGIC
El archivo es una imagen ejecutable. Este valor se define como IMAGE_NT_OPTIONAL_HDR32_MAGIC en una aplicación de 32 bits y como IMAGE_NT_OPTIONAL_HDR64_MAGIC en una aplicación de 64 bits.
IMAGE_NT_OPTIONAL_HDR32_MAGIC
0x10b
El archivo es una imagen ejecutable.
IMAGE_NT_OPTIONAL_HDR64_MAGIC
0x20b
El archivo es una imagen ejecutable.
IMAGE_ROM_OPTIONAL_HDR_MAGIC
0x107
El archivo es una imagen rom.

MajorLinkerVersion

Número de versión principal del enlazador.

MinorLinkerVersion

Número de versión secundaria del enlazador.

SizeOfCode

Tamaño de la sección de código, en bytes, o la suma de todas estas secciones si hay varias secciones de código.

SizeOfInitializedData

Tamaño de la sección de datos inicializado, en bytes, o la suma de todas estas secciones si hay varias secciones de datos inicializadas.

SizeOfUninitializedData

Tamaño de la sección de datos sin inicializar, en bytes, o la suma de todas estas secciones si hay varias secciones de datos sin inicializar.

AddressOfEntryPoint

Puntero a la función de punto de entrada, en relación con la dirección base de la imagen. En el caso de los archivos ejecutables, esta es la dirección inicial. En el caso de los controladores de dispositivos, esta es la dirección de la función de inicialización. La función de punto de entrada es opcional para los archivos DLL. Cuando no hay ningún punto de entrada presente, este miembro es cero.

BaseOfCode

Puntero al principio de la sección de código, en relación con la base de imágenes.

BaseOfData

Puntero al principio de la sección de datos, en relación con la base de imágenes.

ImageBase

Dirección preferida del primer byte de la imagen cuando se carga en memoria. Este valor es un múltiplo de 64 000 bytes. El valor predeterminado de los archivos DLL es 0x10000000. El valor predeterminado de las aplicaciones es 0x00400000, excepto en Windows CE donde se 0x00010000.

SectionAlignment

Alineación de secciones cargadas en memoria, en bytes. Este valor debe ser mayor o igual que el miembro FileAlignment . El valor predeterminado es el tamaño de página del sistema.

FileAlignment

Alineación de los datos sin procesar de las secciones del archivo de imagen, en bytes. El valor debe ser una potencia de 2 entre 512 y 64K (inclusive). El valor predeterminado es 512. Si el miembro SectionAlignment es menor que el tamaño de página del sistema, este miembro debe ser el mismo que SectionAlignment.

MajorOperatingSystemVersion

El número de versión principal del sistema operativo obligatorio.

MinorOperatingSystemVersion

El número de versión secundaria del sistema operativo obligatorio.

MajorImageVersion

El número de versión principal de la imagen.

MinorImageVersion

El número de versión secundaria de la imagen.

MajorSubsystemVersion

El número de versión principal del subsistema.

MinorSubsystemVersion

El número de versión secundaria del subsistema.

Win32VersionValue

Este miembro está reservado y debe ser 0.

SizeOfImage

Tamaño de la imagen, en bytes, incluidos todos los encabezados. Debe ser un múltiplo de SectionAlignment.

SizeOfHeaders

Tamaño combinado de los siguientes elementos, redondeado a un múltiplo del valor especificado en el miembro FileAlignment .

  • e_lfanew miembro de IMAGE_DOS_HEADER
  • Firma de 4 bytes
  • tamaño de IMAGE_FILE_HEADER
  • tamaño del encabezado opcional
  • tamaño de todos los encabezados de sección

CheckSum

Suma de comprobación del archivo de imagen. Los archivos siguientes se validan en tiempo de carga: todos los controladores, cualquier DLL cargado en tiempo de arranque y cualquier ARCHIVO DLL cargado en un proceso crítico del sistema.

Subsystem

Subsistema necesario para ejecutar esta imagen. Se definen los valores siguientes.

Valor Significado
IMAGE_SUBSYSTEM_UNKNOWN
0
Subsistema desconocido.
IMAGE_SUBSYSTEM_NATIVE
1
No se requiere ningún subsistema (controladores de dispositivo y procesos nativos del sistema).
IMAGE_SUBSYSTEM_WINDOWS_GUI
2
Subsistema de interfaz gráfica de usuario (GUI) de Windows.
IMAGE_SUBSYSTEM_WINDOWS_CUI
3
Subsistema de interfaz de usuario en modo de caracteres (CUI) de Windows.
IMAGE_SUBSYSTEM_OS2_CUI
5
Subsistema CUI del sistema operativo/2.
IMAGE_SUBSYSTEM_POSIX_CUI
7
Subsistema POSIX CUI.
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI
9
Windows CE sistema.
IMAGE_SUBSYSTEM_EFI_APPLICATION
10
Aplicación Extensible Firmware Interface (EFI).
IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
11
Controlador EFI con servicios de arranque.
IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
12
Controlador EFI con servicios en tiempo de ejecución.
IMAGE_SUBSYSTEM_EFI_ROM
13
Imagen de EFI ROM.
IMAGE_SUBSYSTEM_XBOX
14
Sistema Xbox.
IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION
16
Aplicación de arranque.

DllCharacteristics

Características dll de la imagen. Se definen los valores siguientes.

Valor Significado
0x0001
Reservado.
0x0002
Reservado.
0x0004
Reservado.
0x0008
Reservado.
IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
0x0020
ASLR con espacio de direcciones de 64 bits.
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
0x0040
El archivo DLL se puede reubicar en tiempo de carga.
IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
0x0080
Se fuerzan las comprobaciones de integridad del código. Si establece esta marca y una sección solo contiene datos sin inicializar, establezca el miembro PointerToRawData de IMAGE_SECTION_HEADER para esa sección en cero; de lo contrario, la imagen no se cargará porque no se puede comprobar la firma digital.
IMAGE_DLLCHARACTERISTICS_NX_COMPAT
0x0100
La imagen es compatible con la prevención de ejecución de datos (DEP).
IMAGE_DLLCHARACTERISTICS_NO_ISOLATION
0x0200
La imagen es consciente del aislamiento, pero no debe aislarse.
IMAGE_DLLCHARACTERISTICS_NO_SEH
0x0400
La imagen no usa el control estructurado de excepciones (SEH). No se puede llamar a ningún controlador en esta imagen.
IMAGE_DLLCHARACTERISTICS_NO_BIND
0x0800
No enlaza la imagen.
IMAGE_DLL_CHARACTERISTICS_APPCONTAINER
0x1000
La imagen debe ejecutarse en un AppContainer.
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
0x2000
Un controlador WDM.
IMAGE_DLL_CHARACTERISTICS_GUARD_CF
0x4000
La imagen admite Protección de flujo de control.
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
0x8000
La imagen es compatible con terminal Server.

SizeOfStackReserve

Número de bytes que se van a reservar para la pila. Solo se confirma la memoria especificada por el miembro SizeOfStackCommit en tiempo de carga; el resto está disponible una página a la vez hasta que se alcance este tamaño de reserva.

SizeOfStackCommit

Número de bytes que se van a confirmar para la pila.

SizeOfHeapReserve

Número de bytes que se van a reservar para el montón local. Solo se confirma la memoria especificada por el miembro SizeOfHeapCommit en tiempo de carga; el resto está disponible una página a la vez hasta que se alcance este tamaño de reserva.

SizeOfHeapCommit

Número de bytes que se van a confirmar para el montón local.

LoaderFlags

Este miembro está obsoleto.

NumberOfRvaAndSizes

Número de entradas de directorio en el resto del encabezado opcional. Cada entrada describe una ubicación y un tamaño.

DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]

Puntero a la primera estructura IMAGE_DATA_DIRECTORY del directorio de datos.

Número de índice de la entrada de directorio deseada. Este parámetro puede ser uno de los valores siguientes.

Valor Significado
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE
7
Datos específicos de la arquitectura
IMAGE_DIRECTORY_ENTRY_BASERELOC
5
Tabla de reubicación base
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
11
Directorio de importación enlazado
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR
14
Tabla de descriptores COM
IMAGE_DIRECTORY_ENTRY_DEBUG
6
Directorio de depuración
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
13
Retrasar la tabla de importación
IMAGE_DIRECTORY_ENTRY_EXCEPTION
3
Directorio de excepciones
IMAGE_DIRECTORY_ENTRY_EXPORT
0
Exportar directorio
IMAGE_DIRECTORY_ENTRY_GLOBALPTR
8
Dirección virtual relativa del puntero global
IMAGE_DIRECTORY_ENTRY_IAT
12
Importar tabla de direcciones
IMAGE_DIRECTORY_ENTRY_IMPORT
1
Importar directorio
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
10
Cargar directorio de configuración
IMAGE_DIRECTORY_ENTRY_RESOURCE
2
Directorio del recurso
IMAGE_DIRECTORY_ENTRY_SECURITY
4
Directorio de seguridad
IMAGE_DIRECTORY_ENTRY_TLS
9
Directorio de almacenamiento local de subprocesos

Comentarios

El número de directorios no es fijo. Compruebe el miembro NumberOfRvaAndSizes antes de buscar un directorio específico.

La estructura real de WinNT.h se denomina IMAGE_OPTIONAL_HEADER32 y IMAGE_OPTIONAL_HEADER se define como IMAGE_OPTIONAL_HEADER32. Sin embargo, si se define _WIN64 , IMAGE_OPTIONAL_HEADER se define como 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;

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado winnt.h (incluya Windows.h)

Consulte también

IMAGE_DATA_DIRECTORY

Estructuras de ImageHlp