Running Code
Common Language Runtime(CLR)是.Net托管程序执行的基础,在某个方法执行前,MSIL代码会被Just in Time(JIT)编译器编译成本地特定的处理器代码。每个方法在第一次调用前都会被JIT编译器生成本地代码,而下一次执行时,则直接调用已经存在的JIT编译的本地代码。 JIT编译和执行会一直不断重复直到执行结束。
在执行过程中,托管代码接受如垃圾回收,安全,与非托管代码交互,跨语言调试支持,增强部署,版本支持等服务。
在window XP和vista, 操作系统loader会通过检查COFF头的一个字节位判断程序是否为托管模块, 如果是,则加载mscoree.dll,_CorValidateImage方法 和 _CorImageUnloading方法会通知loader托管模块已加载和已卸载.
_CorValidateImage 执行以下动作:
1.确认代码是有效的托管代码
2. 把映像的入口设成当前运行时入口
在64位window系统, 会把映像在内存中的格式由PE32转换为PE32+格式
参考: http://msdn.microsoft.com/en-us/library/k5532s8a(v=vs.110).aspx#introduction