Составители:
Рубрика:
TEM_WINDOWS_GUI (0x2).»
unsigned short DLLFlags;
В [2] сказано, что это поле всегда равно 0. На практике оно ино-
гда содержит значение 0x400 («No safe exception handler»), когда
именно – установить пока не удалось. Самое интересное, что в
[5] флаг 0x400 вообще не описан.
long StackReserveSize;
Количество виртуальной памяти, резервируемое под стек. Как
правило, содержит 0x100000.
long StackCommitSize;
Начальный размер стека. Как правило, равен 0x1000.
long HeapReserveSize;
Количество виртуальной памяти, резервируемое под кучу. Как
правило, содержит 0x100000.
long HeapCommitSize;
Начальный размер кучи. Как правило, равен 0x1000.
long LoaderFlags;
Не используется и всегда содержит 0.
long NumberOfDataDirectories;
Количество директорий данных в дополнительном заголовке.
Для сборок .NET обязательно равно 16.
В конце дополнительного заголовка размещается массив из 16 дире-
кторий данных. Каждая директория данных состоит из двух полей:
long RVA;
RVA некоторой структуры. Если данная структура отсутствует в
PE-файле, это поле равно 0.
long size;
Размер структуры. Для отсутствующей структуры размер равен
0.
Для сборок .NET важны 4 из 16 директорий данных (остальные 12 ди-
ректорий, как правило, могут быть обнулены):
• Директория импорта (номер 2, находится по смещению 8 отно-
сительно начала массива директорий). Указывает на данные о
функциях, импортруемых из динамическх библиотек (другими
словами, указывает на секцию «.idata»).
• Директория релокаций (номер 6, смещение 40). Указывает на
таблицу релокаций.
• Директория таблицы адресов импорта (номер 13, смещение 96).
В некотором смысле дублирует директорию импорта, указывая
на таблицу адресов импорта.
• Директория заголовка CLI (номер 15, смещение 112). Указывает
на заголовок, описывающий метаданные сборки .NET.
Структура программных компонентов
47
сборка. Это поле игнорируется загрузчиком, и в случае сборок
.NET должно содержать значение 0.
unsigned short UserMajor;
Старшее число версии данного PE-файла. Для сборок .NET все-
гда 0.
unsigned short UserMinor;
Младшее число версии данного PE-файла. Для сборок .NET
всегда 0.
unsigned short SubsysMajor;
Старшее число версии подсистемы Windows, которая требуется
для запуска программы. В свое время применялось для того,
чтобы отличать программы, использующие новый по тем време-
нам интерфейс Windows 95 и Windows NT 4.0. В настоящее вре-
мя не используется. Для сборок .NET всегда равно 4.
unsigned short SubsysMinor;
Младшее число версии подсистемы Windows. Для сборок .NET
всегда равно 0.
long Reserved;
Это поле зарезервировано и всегда содержит 0.
long ImageSize;
Размер образа PE-файла в памяти. Это поле равно RVA секции,
которая могла бы идти непосредственно после последней сек-
ции в PE-файле. Естественно, что оно выровнено по значению
SectionAlignment.
long HeaderSize;
Суммарный размер всех заголовков, включая заголовок MS-
DOS, заголовок PE-файла, дополнительный заголовок PE-фай-
ла и массив заголовков секций. Суммарный размер кратен зна-
чению из поля FileAlignment.
long FileChecksum;
Контрольная сумма PE-файла. Для сборок .NET – всегда 0.
unsigned short SubSystem;
Идентифицирует подсистему для запуска PE-файла. Для сборок
.NET допустимы следующие значения:
0x2 – необходим графический пользовательский интерфейс
Windows;
0x3 – запускается в консольном режиме;
0x9 – необходим графический пользовательский интерфейс
Windows CE.
В [2] приводится неверная информация об этом поле:
«Subsystem required to run this image. Shall be either IMAGE_SUB-
SYSTEM_WINDOWS_CE_GUI (0x3) or IMAGE_SUBSYS-
46
CIL и системное программирование в Microsoft .NET
46 CIL и системное программирование в Microsoft .NET Структура программных компонентов 47 сборка. Это поле игнорируется загрузчиком, и в случае сборок TEM_WINDOWS_GUI (0x2).» .NET должно содержать значение 0. unsigned short DLLFlags; unsigned short UserMajor; В [2] сказано, что это поле всегда равно 0. На практике оно ино- Старшее число версии данного PE-файла. Для сборок .NET все- гда содержит значение 0x400 («No safe exception handler»), когда гда 0. именно – установить пока не удалось. Самое интересное, что в unsigned short UserMinor; [5] флаг 0x400 вообще не описан. Младшее число версии данного PE-файла. Для сборок .NET long StackReserveSize; всегда 0. Количество виртуальной памяти, резервируемое под стек. Как unsigned short SubsysMajor; правило, содержит 0x100000. Старшее число версии подсистемы Windows, которая требуется long StackCommitSize; для запуска программы. В свое время применялось для того, Начальный размер стека. Как правило, равен 0x1000. чтобы отличать программы, использующие новый по тем време- long HeapReserveSize; нам интерфейс Windows 95 и Windows NT 4.0. В настоящее вре- Количество виртуальной памяти, резервируемое под кучу. Как мя не используется. Для сборок .NET всегда равно 4. правило, содержит 0x100000. unsigned short SubsysMinor; long HeapCommitSize; Младшее число версии подсистемы Windows. Для сборок .NET Начальный размер кучи. Как правило, равен 0x1000. всегда равно 0. long LoaderFlags; long Reserved; Не используется и всегда содержит 0. Это поле зарезервировано и всегда содержит 0. long NumberOfDataDirectories; long ImageSize; Количество директорий данных в дополнительном заголовке. Размер образа PE-файла в памяти. Это поле равно RVA секции, Для сборок .NET обязательно равно 16. которая могла бы идти непосредственно после последней сек- В конце дополнительного заголовка размещается массив из 16 дире- ции в PE-файле. Естественно, что оно выровнено по значению кторий данных. Каждая директория данных состоит из двух полей: SectionAlignment. long RVA; long HeaderSize; RVA некоторой структуры. Если данная структура отсутствует в Суммарный размер всех заголовков, включая заголовок MS- PE-файле, это поле равно 0. DOS, заголовок PE-файла, дополнительный заголовок PE-фай- long size; ла и массив заголовков секций. Суммарный размер кратен зна- Размер структуры. Для отсутствующей структуры размер равен чению из поля FileAlignment. 0. long FileChecksum; Для сборок .NET важны 4 из 16 директорий данных (остальные 12 ди- Контрольная сумма PE-файла. Для сборок .NET – всегда 0. ректорий, как правило, могут быть обнулены): unsigned short SubSystem; • Директория импорта (номер 2, находится по смещению 8 отно- Идентифицирует подсистему для запуска PE-файла. Для сборок сительно начала массива директорий). Указывает на данные о .NET допустимы следующие значения: функциях, импортруемых из динамическх библиотек (другими 0x2 – необходим графический пользовательский интерфейс словами, указывает на секцию «.idata»). Windows; • Директория релокаций (номер 6, смещение 40). Указывает на 0x3 – запускается в консольном режиме; таблицу релокаций. 0x9 – необходим графический пользовательский интерфейс • Директория таблицы адресов импорта (номер 13, смещение 96). Windows CE. В некотором смысле дублирует директорию импорта, указывая В [2] приводится неверная информация об этом поле: на таблицу адресов импорта. «Subsystem required to run this image. Shall be either IMAGE_SUB- • Директория заголовка CLI (номер 15, смещение 112). Указывает SYSTEM_WINDOWS_CE_GUI (0x3) or IMAGE_SUBSYS- на заголовок, описывающий метаданные сборки .NET.
Страницы
- « первая
- ‹ предыдущая
- …
- 28
- 29
- 30
- 31
- 32
- …
- следующая ›
- последняя »