.NET编译器中CLR加载过程

按以下贴操作的:

http://developer.51cto.com/art/200908/146091.htm

由于现在不太了解VS即时窗口,所以后面的测试没有作。

以前,看《程序员的自我修养》,讲解文件PE格式时,也涉及到这些内容。但主要以直接加载过程为主。

而现在.NET为主流了。所以要多学习呀。

.NET的几个核心组件的被调用顺序大致是: mscoree.dll -----> mscorwks.dll(mscorsvr.dll) 
-----> mscorlib.dll ----->mscorjit.dll。

结合蔡学镛的说明与JVM的载入比较如下:

執行 Main.exe 時,.NET CLR 啟動的方式如下:

  1. Windows 所提供的 PE Loader 將 Main.exe 載入記憶體
  2. Windows 所提供的 PE Loader 將 MsCorEE.dll 載入記憶體 (MsCorEE.dll 位於 C:\WINDOWS\System32 或                             C:\WINNT\System32)
  3. 程式跳到 MsCorEE.dll 內的 _CorExeMain()
  4. _CorExeMain() 會載入「適當版本的」.NET CLR。如果你的 .NET 是 1.0.3705 版,則 .NET CLR 位於 C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705                             或者 C:\WINNT\Microsoft.NET\Framework\v1.0.3705
  5. 程式跳到 .NET CLR,進行一些初始化工作 (initialization)
  6. 載入assembly「MsCorLib」,載入module「MsCorLib.dll」,載入 MsCorLib 內的某些 class
  7. 產生主執行緒 (main thread)
  8. 載入「Main」組件,載入「Main.exe」模組,載入「MainClass」類別
  9. 讓主執行緒開始執行 MainClass.Main()

~~~~~~~~~~~~

Java 的作法是先執行 VM (由 java.exe 進入),再請 VM 去執行 Java bytecode。.NET 的作法是,先執行 .NET PE,立刻將控制權轉給 .NET CLR,再由 .NET CLR 來執行 .NET PE。.NET 的作法固然使用上比 Java 方便,但其實 .NET 需要 OS 的 loader配合,而 Java 不需要。

上述第 4 點提及 _CorExeMain() 會載入「適當版本的」.NET CLR。其實 MsCorEE.dll 不是 CLR,只是一個填隙程式 (shim),負責搭起.NET PE 和 .NET CLR 之間橋樑。MsCorEE 會匯集足夠的資料,然後據以判斷要載入 Workstation 版 (MsCorWks.dll) 或者 Server 版 (MsCorSvr.dll) 的 .NET CLR。以本例來說,被載入的是 Workstation 版的 MsCorWks.dll。在載入MsCorWks.dll 之後,還會陸續載入 fusion.dll、MsCorSn.dll、MsCorJIT.dll 等 DLL 檔。

事實上 java.exe 的角色和 MsCorEE.dll 的角色一樣,負責喚起適當版本的 JVM。如果你安裝的是 1.4.x 的 J2SE SDK 而非 1.4.x的 JRE,你的 JDK 內會同時具備 client 和 server 兩個 JVM,分別在 JDK 目錄下的 jre\bin\client\jvm.dll 與 jre\bin\server\jvm.dll。

 

时间: 2024-10-26 13:51:03

.NET编译器中CLR加载过程的相关文章

javascript-【js问题】打开jsp页面时在加载过程中可以显示正在加载提示,完成后隐藏

问题描述 [js问题]打开jsp页面时在加载过程中可以显示正在加载提示,完成后隐藏 我在jsp页面中写了一个<%解析json字符串%>,在页面打开的时候会加载很慢,我想实现在页面加载时出现正在加载提示的效果,用了window.onload()和$(function(){}),都不能打开页面就显示,等<%解析json字符串%>执行完后才可以,我想问有什么办法一开始就显示. 解决方案 把window.onload()或者$(document).ready(function()){} 放

eclipse rcp-实现圆形鼠标,在进程加载过程中

问题描述 实现圆形鼠标,在进程加载过程中 现在实现一个dialog的功能,由于从确认键到功能完全实现需要一段时间,这其中怎样让鼠标变成操作系统加载进程时的样子(win7中的圆形).问一下大神,这个是操作系统自己实现的,还是自己在代码中实现的? ps:Eclipse rcp的开发.

javascript-JSP页面加载过程中阻塞与优化

问题描述 JSP页面加载过程中阻塞与优化 加载JSP页面时,由于初始化的js执行的方法与数据库进行大量的交互,造成阻塞,页面加载不完整,页面处于无响应状态,在加载时,添加一个超时方法,页面显示完整,页面处于无响应状态,如何优化 解决方案 参考Facebook的pipeline架构.页面分为许多pagelet,然后通过chunk-encoding来分块加载会好些.也就是在页面里一块一块加载. 还有,常用数据最好放在Redis中,数据库查询比缓存慢多了.

insmod模块加载过程代码分析1【转】

转自:http://blog.chinaunix.net/uid-27717694-id-3966290.html 一.概述模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到内核中.对于每个模块,系统都要分配一个包含以下数据结构的内存区.一个module对象,表示模块名的一个以null结束的字符串,实现模块功能的代码.在2.6内核以前,insmod模块过程主要是通过modutils中的insmod加载,大量工作都是在用户空间完成.但在2.6内核以后,系统使用busybo

WorldWind系列五:插件加载过程全解析

不得不承认World Wind的代码真的很庞大,没有太多帮助文档的前提下,一头钻进代码里肯定令你头疼的,甚至研究代码间关联仿佛是在走迷宫.我最近一直想弄明白如何在 MenuBar中加载那些插件的,WorldWind学习系列四中研究的只是特殊的三个功能加载的,那三个没有继承Plugin类,不算是插件功能加载.所以WorldWind学习系列四加载的三个是特殊情况,不是一般的插件加载.今天下午终于柳暗花明,如果你真正关注World Wind分析,那么就好好看看下面的插件加载过程全解析. 我们先看看Pl

spring启动component-scan类扫描加载过程---源码分析

最近因为写书的事情,一段时间没有写博客了,有朋友最近问到了spring加载类的过程,尤其是基于annotation注解的加载过程,有些时候如果由于某些系统部署的问题,加载不到,很是不解!就针对这个问题,我这篇博客说说spring启动过程,用源码来说明,这部分内容也会在书中出现,只是表达方式会稍微有些区别,我将使用spring 3.0的版本来说明(虽然版本有所区别,但是变化并不是特别大),另外,这里会从WEB中使用spring开始,中途会穿插自己通过new ClassPathXmlApplicat

JQuery中DOM加载与事件执行实例分析_jquery

本文实例讲述了JQuery中DOM加载与事件执行原理.分享给大家供大家参考.具体分析如下: JavaScript和HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的.当文档或者它的某些元素发生某些变化或操作时,浏览器会自动生成一个事件.例如当浏览器装载完一个文档后,会生成事件:当用户单击某个按钮时,也会生成事件.虽然利用传统的JavaScript事件能完成这些交互,但jQuery增加并扩展了基本的事件处理机制.jQuery不仅提供了更加优雅的事件处理语法,而且极大地增强了事件处理能

Android WebKit HTML主资源加载过程

Android WebKit HTML主资源加载过程 前言 在浏览器里面输入网址,最终浏览器会调用WebView的loadUrl(),然后就开始加载整个网页.整个加载过程中,最重要的一步就是HTML主资源的加载.WebKit将网页的资源分为主资源(MainResource)和子资源(SubResource). WebKit资源分类 主资源:HTML文件. 子资源:CSS, JS, JPG等等,除了HTML文件之外的所有资源都称之为子资源 本章主要讲主资源的加载过程,子资源的加载过程后期会专门详细

ThinkPHP3.2 加载过程(二)

原文:ThinkPHP3.2 加载过程(二) 回顾: 上次介绍了 ThinkPHP 的 Index.PHP入口文件.但只是TP的入口前面的入口(刷boss总是要过好几关才能让你看到 ,不然boss都没面子啊),从Index.PHP最后一行把我们引路到了TP的大门前(ThinkPHP/ThinkPHP.php) // 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php';   本次目标: 查看TP的大门,同时稍微探索一下大门内部的东西   正文: 先上代