.net NET可执行文件是如何运行的?

.net NET可执行文件是如何运行的?,.net,architecture,executable,.net,Architecture,Executable,我知道它是做什么的,但我还没有找到它是如何执行的解释。与Java不同,我们不需要调用虚拟机可执行文件来运行程序 在.NET中,只需正常运行可执行文件。它是Windows服务吗?它是由.Net可执行文件引用的DLL吗?它是否绑定到操作系统内核?它是一种类似于防病毒的拦截器吗?它是什么?Windows NT用于可执行文件和以后使用的格式 安装.NET Framework时,Windows知道这些信息,并使用这些信息启动带有可执行文件的CLR。如果我没记错的话,.NET的早期版本不是由Windows自

我知道它是做什么的,但我还没有找到它是如何执行的解释。与Java不同,我们不需要调用虚拟机可执行文件来运行程序

在.NET中,只需正常运行可执行文件。它是Windows服务吗?它是由.Net可执行文件引用的DLL吗?它是否绑定到操作系统内核?它是一种类似于防病毒的拦截器吗?它是什么?

Windows NT用于可执行文件和以后使用的格式


安装.NET Framework时,Windows知道这些信息,并使用这些信息启动带有可执行文件的CLR。

如果我没记错的话,.NET的早期版本不是由Windows自动加载的,但多年来,随着Windows版本的增加,进程的引导现在变得毫无意义

.Net的CLR是Microsoft对CLI的实现。Mono是它的另一个实现

从技术上讲,CLR是作为COM服务器组件实现的,它在windows中运行并管理.net程序集的执行


如果你真的想了解细节,你应该看看杰弗里·里克特的书:

这取决于你使用的是什么版本的Windows。但基本机制是每个.NET程序集包含五个字节的非托管代码。对于EXE,它是指向c:\windows\system32\mscoree.dll中的_CorExeMain()的JMP指令。然后初始化CLR并启动程序的Main()方法

更高版本的Windows有一个加载程序,它知道.NET程序集的格式,并直接与mscoree.dll集成。需要支持非常不同寻常的功能,即32位可执行文件可以启动64位进程。更多关于这方面的信息,请参阅


这是10000英尺的视野。NET和Java之间的本质区别在于.NET程序集可以同时包含非托管代码(如JMP)和数据(程序集清单和IL)。Java.class或.jar文件是纯数据。

JIT只是运行CLR程序的VM的一个方面。一致的CLR虚拟机甚至可能没有JIT。不,我怀疑这不是JIT的复制品。虽然最初的问题/标签令人困惑(尤其是“JIT”的东西),但有一个参考是“不需要调用虚拟机”(例如
java theprogram.jar
)。