Поделиться через


структура 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
Файл представляет собой исполняемый образ. Это значение определяется как IMAGE_NT_OPTIONAL_HDR32_MAGIC в 32-разрядном приложении и как IMAGE_NT_OPTIONAL_HDR64_MAGIC в 64-разрядном приложении.
IMAGE_NT_OPTIONAL_HDR32_MAGIC
0x10b
Файл представляет собой исполняемый образ.
IMAGE_NT_OPTIONAL_HDR64_MAGIC
0x20b
Файл представляет собой исполняемый образ.
IMAGE_ROM_OPTIONAL_HDR_MAGIC
0x107
Файл представляет собой образ ПЗУ.

MajorLinkerVersion

Основной номер версии компоновщика.

MinorLinkerVersion

Дополнительный номер версии компоновщика.

SizeOfCode

Размер раздела кода в байтах или сумма всех таких разделов при наличии нескольких разделов кода.

SizeOfInitializedData

Размер раздела инициализированных данных (в байтах) или сумма всех таких разделов при наличии нескольких инициализированных разделов данных.

SizeOfUninitializedData

Размер неинициализированного раздела данных (в байтах) или сумма всех таких разделов при наличии нескольких неинициализированных разделов данных.

AddressOfEntryPoint

Указатель на функцию точки входа относительно базового адреса образа. Для исполняемых файлов это начальный адрес. Для драйверов устройств это адрес функции инициализации. Функция точки входа является необязательной для библиотек DLL. Если точка входа отсутствует, этот элемент равен нулю.

BaseOfCode

Указатель на начало раздела кода относительно базы образа.

BaseOfData

Указатель на начало раздела данных относительно базы образа.

ImageBase

Предпочтительный адрес первого байта изображения при загрузке в память. Это значение кратно 64 КБ байт. Значение по умолчанию для библиотек DLL — 0x10000000. Значение по умолчанию для приложений — 0x00400000, за исключением Windows CE, где оно 0x00010000.

SectionAlignment

Выравнивание разделов, загруженных в память, в байтах. Это значение должно быть больше или равно члену FileAlignment . Значением по умолчанию является размер страницы для системы.

FileAlignment

Выравнивание необработанных данных разделов в файле изображения в байтах. Значение должно быть равно 2 в диапазоне от 512 до 64 КБ (включительно). Значение по умолчанию — 512. Если элемент SectionAlignment меньше, чем размер системной страницы, он должен быть таким же, как SectionAlignment.

MajorOperatingSystemVersion

Основной номер версии требуемой операционной системы.

MinorOperatingSystemVersion

Дополнительный номер версии требуемой операционной системы.

MajorImageVersion

Основной номер версии образа.

MinorImageVersion

Дополнительный номер версии образа.

MajorSubsystemVersion

Основной номер версии подсистемы.

MinorSubsystemVersion

Дополнительный номер версии подсистемы.

Win32VersionValue

Этот элемент зарезервирован и должен иметь значение 0.

SizeOfImage

Размер изображения в байтах, включая все заголовки. Должен быть кратным SectionAlignment.

SizeOfHeaders

Объединенный размер следующих элементов, округленный до значения, кратного значению, указанному в элементе FileAlignment .

  • e_lfanew член IMAGE_DOS_HEADER
  • 4-байтовая подпись
  • размер IMAGE_FILE_HEADER
  • размер необязательного заголовка
  • размер всех заголовков разделов

CheckSum

Контрольная сумма файла образа. Во время загрузки проверяются следующие файлы: все драйверы, любая библиотека DLL, загруженная во время загрузки, и любая библиотека DLL, загруженная в критически важный системный процесс.

Subsystem

Подсистема, необходимая для запуска этого образа. Определены следующие значения.

Значение Значение
IMAGE_SUBSYSTEM_UNKNOWN
0
Неизвестная подсистема.
IMAGE_SUBSYSTEM_NATIVE
1
Подсистема не требуется (драйверы устройств и собственные системные процессы).
IMAGE_SUBSYSTEM_WINDOWS_GUI
2
Подсистема графического пользовательского интерфейса (GUI) Windows.
IMAGE_SUBSYSTEM_WINDOWS_CUI
3
Подсистема пользовательского интерфейса windows (CUI).
IMAGE_SUBSYSTEM_OS2_CUI
5
Подсистема CUI OS/2.
IMAGE_SUBSYSTEM_POSIX_CUI
7
Подсистема CUI POSIX.
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.
IMAGE_SUBSYSTEM_XBOX
14
Система Xbox.
IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION
16
Приложение загрузки.

DllCharacteristics

Характеристики dll образа. Определены следующие значения.

Значение Значение
0x0001
Зарезервировано.
0x0002
Зарезервировано.
0x0004
Зарезервировано.
0x0008
Зарезервировано.
IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
0x0020
ASLR с 64-разрядным адресным пространством.
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
0x0040
Библиотеку DLL можно переместить во время загрузки.
IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
0x0080
Проверки целостности кода выполняются принудительно. Если этот флаг задан, а раздел содержит только неинициализированные данные, установите для элемента PointerToRawDataIMAGE_SECTION_HEADER для этого раздела значение 0; В противном случае изображение не сможет загрузиться, так как цифровая подпись не может быть проверена.
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
Образ поддерживает Control Flow Guard.
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