Подтвердить что ты не робот

Как Windows различает обычный EXE и .NET exe?

Меня спросили в интервью о том, как ОС Windows различает обычный EXE и .NET EXE.

Мой ответ был, когда .NET exe создается, компилятор помещает некоторую информацию в заголовок. Информация PE32 или PE32+. Windows проверяет заголовок, чтобы определить, нужно ли ему загружать MSCOREE.dll, который загружает CLR и выполняет EXE.

Правильно ли мой ответ?

4b9b3361

Ответ 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