Заголовок CLR
Заголовок CLR
Заголовок CLR- это блок данных, который должны поддерживать все файлы .NET (и действительно поддерживают, благодаря компилятору C#), чтобы среда CLR имела возможность обрабатывать их. По сути, этот заголовок определяет множество флагов, позволяющих среде выполнения выяснить структуру данного управляемого файла. Например, существуют флаги, позволяющие идентифицировать размещение метаданных и ресурсов в файле, выяснить версию среды выполнения, для которой создавался компоновочный блок, значение (необязательного) открытого ключа и т.д. Если с dumpbin.exe использовать флаг /clrheader, вы получите внутреннюю информацию заголовка CLR для данного компоновочного блока .NET, как показано на рис. 11.2.
Заголовок CLR компоновочного блока представляется неуправляемой структурой C-типа (IMAGE _ COR20 _ HEADER), определенной в файле C-заголовка corhdr.h.
Рис. 11.1. Информация заголовка Win32 компоновочного блока
Рис. 11.2. Информация заголовка CLR компоновочного блока
Для заинтересованных читателей предлагаем ознакомиться с видом структуры, о которой здесь идет речь.
// Структура заголовка CLR 2.0.
typedef struct IMAGE_COR20_HEADER {
// Версии заголовка.
ULONG cb;
USHORT MajorRuntimeVersion;
USHORT MinorRuntimeVersion;
// Таблица символов и начальная информация.
IMAGE_DATA_DIRECTORY MetaData;
ULONG Flags;
ULONG EntryPointToken;
// Информация связывания.
IMAGE_DATA_DIRECTQRY Resources;
IMAGE_DATA_DIRECTORY StrongNameSignature;
// Стандартная информация адресации и связывания.
IMAGE_DATA_DIRECTQRY CodeManagerTable;
IMAGE_DATA_DIRECTORY VTableFixups;
IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
// Информация прекомпилированного образа (только для
// внутреннего использования – обнуляется)
IMAGE_DATA_DIRECTORY ManagedNativeHeader;
} IMAGE_COR20_HEADER;
Снова обращаем ваше внимание на то, что вам, как разработчику .NET-приложений, не придется иметь дело с информацией заголовков Win32 и CLR (за исключением того случая, когда вы захотите построить новый управляемый компилятор). Вам достаточно понимать, что каждый компоновочный блок .NET обязательно содержит эти данные, используемые средой выполнения .NET и операционной системой Win32.