|
Загрузка CLR (часть 1)
Каждая создаваемая сборка может быть либо исполняемым приложением, либо
DLL, содержащими набор типов (компонентов) для использования в исполняемом
приложении. За управление исполнением кода, содержащегося в этих сборках,
отвечает, конечно же, CLR. Это значит, что на компьютере, выполняющем приложение, должна быть установлена платформа .NET Framework. В Microsoft создан
дистрибутивный пакет .NET Framework для свободного распространения, который
вы можете бесплатно поставлять своим заказчикам. В дальнейшем .NET Framework
будет включена в новые версии Windows, и вам не придется ее поставлять со своими сборками.
Понять, установлена ли платформа .NET Framework на компьютере, можно,
поискав файл MSCorEE.dll в каталоге %windir%\system32. Если он есть, значит,
платформа установлена. Заметьте: на одном компьютере может быть установлено одновременно несколько версий .NET Framework. Чтобы определить, какие
именно версии установлены, проверьте подразделы раздела реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy
Когда вы компонуете ЕХЕ-сборку. компилятор/компоновщик встраивает специальную информацию в заголовок и в раздел .text РЕ-файла результирующей
сборки. При запуске ЕХЕ-файла эта специальная информация приводит к загрузке и инициализации CLR. Затем CLR находит метод, являющийся точкой входа
приложения, и позволяет приложению начать выполнение.
Аналогично, если неуправляемое приложение вызывает LoadLibrary для загрузки
управляемой сборки, функция — точка входа DLL, знает, что надо загрузить < XR,
чтобы обработать код, содержащийся в сборке.
Скорее всего вам не потребуется знать, как загружается CLR. Большинству программистов достаточно знать, что она нужна для запуска программ, и все. Одна-
ко ради любопытных я потрачу оставшуюся часть раздела на объяснение того, как
управляемые ЕХЕ или DLL запускают CLR.
Когда компилятор/компоновщик создает исполняемую сборку, следующая
6-байтная функция-заглушка х86 встраивается в раздел .text РЕ файла:
JMP _CorExeHain
Так как функция _CorExeHaln импортируется из динамически подключаемой
библиотеки MSCorEE.dll, на эту библиотеку имеется ссылка в разделе импорта
(. idata) файла сборки. MSCorEE.dll расшифровывается как Microsoft Component Object
Runtime Execution Engine (ядро исполняющей среды компонентных объектов Microsoft).
При вызове управляемого ЕХЕ-файла Windows рассматривают его как любой нормальный (неуправляемый) ЕХЕ-файл — загрузчик Windows загружает файл
и проверяет в разделе . idata, следует ли загружать MSCorEE.dll в адресное пространство процесса. Затем загрузчик получаст адрес функции _CorExeMain библиотеки MSCorEE.dll и подправляет команду JMP функции-заглушки в управляемом ЕХЕ-файле.
Предыдущая стр.   
Оглавление   
Следующая стр.
Средняя оценка:     (1 - 1 голосов) Для оценки необходимо зарегистрироваться
Только зарегистрировавшиеся пользователи могут оставлять комментарии
|
|