структура 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
Состояние файла изображения. Этот элемент может быть одним из следующих значений.
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
Подсистема, необходимая для запуска этого образа. Определены следующие значения.
DllCharacteristics
Характеристики dll образа. Определены следующие значения.
Значение | Значение |
---|---|
|
Зарезервировано. |
|
Зарезервировано. |
|
Зарезервировано. |
|
Зарезервировано. |
|
ASLR с 64-разрядным адресным пространством. |
|
Библиотеку DLL можно переместить во время загрузки. |
|
Проверки целостности кода выполняются принудительно. Если этот флаг задан, а раздел содержит только неинициализированные данные, установите для элемента PointerToRawDataIMAGE_SECTION_HEADER для этого раздела значение 0; В противном случае изображение не сможет загрузиться, так как цифровая подпись не может быть проверена. |
|
Образ совместим с предотвращением выполнения данных (DEP). |
|
Образ учитывает изоляцию, но не должен быть изолирован. |
|
Образ не использует структурированную обработку исключений (SEH). На этом изображении невозможно вызвать обработчики. |
|
Не привязывайте изображение. |
|
Изображение должно выполняться в AppContainer. |
|
Драйвер WDM. |
|
Образ поддерживает Control Flow Guard. |
|
Образ учитывает сервер терминалов. |
SizeOfStackReserve
Количество байтов, зарезервированных для стека. Во время загрузки фиксируется только память, указанная элементом SizeOfStackCommit ; остальные будут доступны по одной странице за раз, пока не будет достигнут этот размер резерва.
SizeOfStackCommit
Число байтов, которые необходимо зафиксировать для стека.
SizeOfHeapReserve
Количество байтов, зарезервированных для локальной кучи. Во время загрузки фиксируется только память, указанная элементом SizeOfHeapCommit ; остальные будут доступны по одной странице за раз, пока не будет достигнут этот размер резерва.
SizeOfHeapCommit
Число байтов для фиксации для локальной кучи.
LoaderFlags
Этот элемент устарел.
NumberOfRvaAndSizes
Количество записей каталога в оставшейся части необязательного заголовка. Каждая запись описывает расположение и размер.
DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]
Указатель на первую IMAGE_DATA_DIRECTORY структуру в каталоге данных.
Номер индекса нужной записи каталога. Этот параметр может принимать одно из указанных ниже значений.
Комментарии
Количество каталогов не является фиксированным. Прежде чем искать определенный каталог, проверьте элемент 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) |