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

Где именно работает .NET Runtime (CLR), JIT Compiler?

Этот вопрос может показаться немного глупым или странным, но я слышал много о .NET CLR, компиляторе JIT и о том, как он работает blah blah blah... Но теперь мне интересно, где именно оно расположено или размещено.

Это -

  • Хостинг в составе операционной системы Windows, когда мы действительно устанавливаем .NET Framework

ИЛИ

  • Это часть некоторого .exe, который мы видим в диспетчере задач

Я ищу подробный ответ на это. Кто-то может задать этот вопрос как "Как операционная система Windows запускает/выполняет .NET Исполняемый внутри .NET Runtime?

4b9b3361

Ответ 1

где именно оно расположено или размещено

Это просто обычная DLL, вы найдете ее версию x86 в C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll. Версия x64 находится в каталоге Framework64. Версия .NET v2 имела другое имя, mscorjit.dll, найти его в каталогах v2.0.50727.

Он не "размещен" вообще, операционная система полностью не знает, что она существует. CLR знает, как его найти и загрузить. Обязательно так, что CLR решает, когда запускать программу. Он просто имеет имя DLL с жестким кодированием и использует LoadLibrary ( "clrjit.dll" ) для загрузки, GetProcAddress ( "getJit" ), чтобы получить функцию factory. То, что вы можете увидеть в исходном коде CoreCLR, хотя в этой версии CLR больше не является джиттером.

Вы также можете увидеть CLR с Explorer, опять же просто обычную DLL. Это clr.dll в версиях v4, mscorwks.dll и mscorsvc.dll в версиях v2. Два разных типа с разными сборщиками мусора, "wks" - это версия рабочей станции, "svc" - это версия сервера. Сравните с файлом <gcServer> config file.

Что задает вопрос: "Как загружается CLR?" Что задание c:\windows\syswow64\mscoree.dll, вы будете использовать c:\windows\system32\mscoree.dll, когда вы нацеливаете x64 в проект EXE. Каждая сборка .NET содержит 5 или 9 байтов неуправляемого кода, переход в эту DLL. Либо _CorExeMain, либо _CorDllMain, в зависимости от того, была ли сборка построена как exe или библиотека. mscoree.dll рассматривает метаданные в сборке и решает, какую версию CLR нужно загрузить, чтобы она могла быть выполнена надлежащим образом.

Продолжалось больше махинаций, я только что опубликовал 10 000 футов, которые вы просили. Если это вас интересует, вы, вероятно, захотите узнать больше о пользовательском хостинге CLR, чтобы увидеть человека за занавеской.

Ответ 2

Как операционная система Windows запускает/исполняет исполняемые программы .NET внутри .NET Runtime?

Каждая управляемая сборка или исполняемый файл .NET имеет специальные заголовки CLR, которые вы можете увидеть, просмотрев сборку в ILDASM. Эти заголовки указывают на версию среды выполнения, которая должна быть загружена. Кроме того, есть раздел изображения с Import Address Table, указывающий на то, что нужно загрузить:

----- Image sections:
Import Address Table
DLL : mscoree.dll
          0x00002000 Import Address Table
          0x0000a37e Import Name Table
          0          Time Date Stamp
          0          Index of First Forwarder Reference

          0x0000  _CorDllMain

 ----- CLR Header:
 Header size:                        0x00000048
 Major runtime version:              0x0002
 Minor runtime version:              0x0005
 0x00003184 [0x00007078] address [size] of Metadata Directory:        
 Flags:                              0x00000001
 Entry point token:                  0x00000000
 0x00000000 [0x00000000] address [size] of Resources Directory:       
 0x00000000 [0x00000000] address [size] of Strong Name Signature:     
 0x00000000 [0x00000000] address [size] of CodeManager Table:         
 0x00000000 [0x00000000] address [size] of VTableFixups Directory:    
 0x00000000 [0x00000000] address [size] of Export Address Table:      
 0x00000000 [0x00000000] address [size] of Precompile Header:   

При запуске операционной системы загружается mscoree.dll (или The Shim), и это загрузочный файл для clr.dll и clrjit.dll для .NET 4.0 и выше, или mscordacwks.dll и mscorjit.dll для .NET 2.0 или ниже, которые являются средой выполнения и JIT, соответственно. Вы можете видеть, что для точки входа для исходной dll указывается метод _CorDllMain для библиотеки классов и _CorExeMain для исполняемого файла, который отвечает за загрузку и джиттинг точки входа. Они, в свою очередь, вызовут точку входа ваших приложений в управляемую среду.

Ответ 3

Это основано на моем понимании и направит вас к вам, но не может быть полностью очищено.

Файлы EXE/DLL, составляющие Runtime DotNet (CLR и т.д.), расположены в следующих местах:

C:\Windows\Microsoft.NET\Framework   // for the 32 bit runtime
C:\Windows\Microsoft.NET\Framework64 // for the 64 bit runtime

Внутри вас есть разные версии, такие как 2.0.50727, 3.0, 3.5 и 4.0.30319 (версии в моей системе сегодня).

Здесь MSBuild, а также файлы, зарегистрированные в IIS, расположены и запускаются из.

Я не знаю, будет ли это размещено Windows во время выполнения, или если есть реальный EXE, с которым вы можете подключиться с помощью отладчика и увидеть его в диспетчере задач.

Надеюсь, это даст вам более глубокое понимание.