天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

理解.NET程序集的執行過程

  對于一個已編譯好的.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并把執行控制轉移到程序集的入口點。

NET技術理解.NET程序集的執行過程,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本亚欧热亚洲乱色视频 | 美女张开腿露出尿口扒开来摸动漫 | 国产中文视频 | 欧美末成年videos在线 | 国产99热在线观看 | 午夜神器18以下不能进免费 | 亚洲一区自拍高清亚洲精品 | 黄色直接观看 | 无码AV精品一区二区三区 | 亚洲无吗视频 | 国产主播AV福利精品一区 | 妹妹我要色 | 亚州天堂在线视频av | 美女被打开了屁股进去的视频 | 欧美性狂猛bbbbbbxxxx | 亚洲永久精品ww47app | 久热人人综合人人九九精品视频 | 超碰日韩人妻高清视频 | 在线天天看片免费视频观看 | 精品午夜中文字幕熟女人妻在线 | 亚洲 日本 欧美 中文字幕 | 久久伦理影院 | 午夜精品久久久久久久爽牛战 | 中字幕久久久人妻熟女天美传媒 | 纯肉巨黄H爆粗口男男分卷阅读 | 香蕉eeww99国产精品 | av免费网站不卡观看 | 亚洲字幕在线观看 | 男女一边摸一边做羞羞的事情免费 | 亚洲精品乱码电影在线观看 | 亚洲青青青网伊人精品 | 女人张开腿让男人添 | 欧美国产一区二区三区激情无套 | 国产亚洲精品久久久久久鸭绿欲 | 99久久无码热高清精品 | 欧美成人亚洲高清在线观看 | 亚在线观看免费视频入口 | 精品国产国偷自产在线观看 | 成人精品视频在线 | 99国内精品久久久久久久清纯 | 狠狠色在在线视频观看 |