成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

理解.NET程序集在Windows中的執行過程

開發 后端
今天我們要看看一個已編譯好的.NET程序集,Windows操作系統是如何啟動執行的呢?這對于大家提升開發能力有極大的幫助。

對于一個已編譯好的.NET程序集,Windows操作系統是如何啟動執行的呢?日常使用中我們發現對于托管的和非托管的程序集編譯器都會吧程序集編譯成以.exe或.dll等為擴展名的文件,可見Windows加載器并沒有區分是托管還是非托管的程序集,而且我們也知道對非托管的程序集是在編譯器直接編譯成了機器碼,自然可以由CPU直接執行,而托管的.NET 程序集是包含復雜結構的MSIL代碼,執行時會使用JIT即時編譯器將IL代碼編譯成機器碼,再由CPU執行,當然這期間還需要執行其它許多的工作,如加載CLR、執行初始化等工作,那么這些是怎么自動實現的呢?

理解這些問題是我們深入.NET的關鍵,由于日常的開發工作并不涉及這些知識(編譯器已經給我們做了),結果是很多的.NET 書忽略了這一點,也很少有人研究者方面的內容,所以在閱讀了《.NET 高級調試》這本書給了我非常清晰地認識,把里面的這方面精彩的內容做了一個總結以供那些還沒有清楚.NET 程序集如何執行的學者們一個簡單的參考。

首先我們要清楚的是對于托管還是非托管程序集,他們在編譯器執行編譯時都會編譯成一個特殊的文件格式,即PE文件(可移植可執行文件格式),操作系統加載器通過加載這樣的PE文件來執行程序集的。可以這么說吧,無論是托管程序還是非托管程序他們實際上都是編譯成這樣的PE文件(只是有部分內容不一樣而已)。

然后這個PE文件會指示如何執行托管程序集和非托管程序集,加載器首先會查找到PE頭中的AddressOfEntryPoint域,這個域指示PE文件的入口點位置,在.NET程序集中是指向.text段中的CLR頭--〉包含一個結構IMAGE_COR20_HEADER—>包含許多信息如托管代碼應用程序的入口點,目標CLR的主版本號和從版本號,以及程序集的強名稱簽名等--〉Windows加載器根據這個數據結構決定加載哪個版本的CLR以及一些基本的程序集信息。在.text段中還包含了程序集的元數據表,MSIL以及非托管啟動存根代碼,而非托管啟動存根代碼包好了由Windows加載器執行役啟動PE文件執行的代碼,結構如圖所示。

圖片2

這樣.NET 程序集的加載算法包括:

1、用戶執行一個.NET程序集;

2、Windows加載器查看AddressOfEntryPoint域,并找到PE映像文件的.text段;

3、位于AddressOfEntryPoint位置上的字節只是一個JMP(跳轉)指令,這個指令跳轉到mscoree.dll中的一個導入函數;

4、將執行控制轉移到mscoree.dll中的_CorExeMain中,這個函數將啟動CLR并把執行控制轉移到程序集的入口點。

原文鏈接:http://www.cnblogs.com/suyan010203/archive/2011/05/29/2062454.html

【編輯推薦】

  1. Visual Studio 2010中Xaml開發格式設置技巧
  2. Visual Studio 2010中手動添加圖片文件
  3. 使用Visual Studio 2010統一管理數據庫對象
  4. Visual Studio 2010 TFS探索之旅
  5. Visual Studio 2010更改顏色背景的方法
責任編輯:彭凡 來源: 博客園
相關推薦

2009-07-29 15:51:29

ASP.NET中執行w

2009-08-14 17:57:43

ASP.NET MVC

2009-07-08 17:42:33

JDBC存儲過程

2010-01-08 13:23:38

ibmdwInfoSphere

2022-01-12 06:59:02

C#程序集裝載

2021-09-26 09:59:14

MYSQL開發數據庫

2013-08-21 16:48:42

.Net命名空間

2009-07-29 14:43:08

ASP.NET tra

2009-11-13 09:45:54

ADO.NET程序集

2009-07-27 13:25:15

Postback程序處ASP.NET

2009-07-21 17:06:35

iBATIS.NET執

2009-02-27 16:22:34

AjaxProAjax.NET

2009-12-23 16:57:35

理解ADO.NET

2021-05-06 05:37:40

JavascriptSTT機器學習

2010-01-11 09:18:28

2011-05-31 10:38:14

PostgreSQL

2009-08-05 18:34:07

堆棧遍歷

2024-09-30 09:48:41

RabbitMQ消息中間件

2010-01-06 13:32:30

.NET Framew

2009-05-15 09:33:52

開發線程沖突lock
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久人人网 | 免费黄色网址视频 | 久久噜噜噜精品国产亚洲综合 | 五月天婷婷久久 | 神马久久久久久久久久 | 久久精品国产一区二区电影 | 亚洲网一区 | 一久久久| 亚洲欧美精品在线观看 | 免费观看羞羞视频网站 | 欧美日韩高清在线观看 | 三级免费 | 日韩午夜电影在线观看 | 久久99精品久久久久久噜噜 | 一区二区三区精品视频 | 亚洲精选一区二区 | 亚州一区二区三区 | 国产伦一区二区三区 | 日韩一区二区三区四区五区 | 精品成人佐山爱一区二区 | 日本不卡免费新一二三区 | 亚洲激情视频在线 | 免费国产视频 | 国产成人精品免费视频大全最热 | 国产精品美女久久久 | 欧美亚洲综合久久 | 国产精品免费一区二区三区四区 | 精品国产欧美 | 拍拍无遮挡人做人爱视频免费观看 | 国产一级特黄视频 | 日韩欧美中文字幕在线观看 | 一区二区不卡高清 | 国产成人精品999在线观看 | 国外成人在线视频网站 | 国产精品乱码一区二三区小蝌蚪 | 91高清在线观看 | 中文字幕亚洲在线 | 免费一区 | 欧美福利影院 | 欧美激情国产日韩精品一区18 | 99re|