Как Windows различает обычный EXE и .NET exe?
Меня спросили в интервью о том, как ОС Windows различает обычный EXE и .NET EXE.
Мой ответ был, когда .NET exe создается, компилятор помещает некоторую информацию в заголовок. Информация PE32 или PE32+. Windows проверяет заголовок, чтобы определить, нужно ли ему загружать MSCOREE.dll, который загружает CLR и выполняет EXE.
Правильно ли мой ответ?
Ответы
Ответ 1
В то время как я согласен с GregC в целом, времена, когда этот тип информации полезен. Но это один сложный вопрос, который, как ожидается, будет отвечать в интервью (если это не будет для команды CLR:)
Веб-страницы и блоги...
Книги...
Ответ 2
Я думаю, что следующие две ссылки - хороший ресурс, чтобы понять структуру файлов PE и загрузчик Windows.
Точная цитата из статьи в марте 2002 года, на которую я верю, отвечает на ваш вопрос:
Основная цель .NET. исполняемый файл должен получить .NET-специфический информации, такой как метаданные и промежуточный язык (IL) в Память. Кроме того, .NET. исполняемые ссылки против Mscoree.dll. Эта DLL является отправной точкой для процесса .NET. Когда загружается исполняемый файл .NET, его точка входа обычно является крошечной заглушкой код. Этот заглушка просто переходит к экспортированная функция в MSCOREE.DLL(_CorExeMain или _CorDllMain). Из там, MSCOREE берет на себя ответственность, и начинает использовать метаданные и IL из исполняемый файл. Эта настройка аналогично тому, как приложения в Visual Базовая (до .NET) используется MSVBVM60.DLL.
Ответ 3
Вкратце, и это было какое-то время, поэтому некоторые из них могут быть немного датированы...
Для XP и более поздних версий загрузчик ОС расширен для обнаружения управляемых сборок на основе записи каталога PE, если присутствует запись в каталоге, загрузчик автоматически загружает файл mscoree.dll, а переход выполняется в функцию mscoree, _CorExeMain (2) для исполняемых файлов и _CorDllMain для dll. _CorExeMain отвечает за загрузку CLR и запуск запуска управляемого кода.
Я использовал следующее, чтобы напомнить себе имена точек входа...
C:\Windows\System32>dumpbin -exports mscoree.dll
Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file mscoree.dll
File Type: DLL
Section contains the following exports for mscoree.dll
00000000 characteristics
4AF3AF84 time date stamp Fri Nov 06 07:09:24 2009
0.00 version
17 ordinal base
126 number of functions
123 number of names
ordinal hint RVA name
38 0 0001AAA0 CLRCreateInstance
... Lots of stuff left out...
136 76 00015030 _CorDllMain
138 77 00004DDB _CorExeMain
137 78 0001A981 _CorExeMain2
139 79 0002033B _CorImageUnloading
140 7A 000042D0 _CorValidateImage
24 00008017 [NONAME]
142 00014C4D [NONAME]
Summary
4000 .data
4000 .reloc
1000 .rsrc
40000 .text