1. 程式人生 > >可執行EXE在windows調用過程

可執行EXE在windows調用過程

繼續 介紹 以及 mage 即時編譯 檢測 技術分享 驗證 str

舉例圖中, 一個C#編寫的測試程序,

輸出兩句話分別 : Hello, GoodBye, 介紹其在windows上CLR的調用過程。

技術分享

1.在執行Main方法之前, CLR會檢測出Main的代碼引用的所有類型。這導致CLR 分配一個內部數據結構來管理對引用類型的訪問。

Main方法次調用WriteLine時, JIT函數會被調用,JIT函數負責將方法的IL代碼編譯成本機CPU指令,

由於IL是即時編譯的, 所以CLR這個組件稱為JIT編譯器

2. JIT函數被調用時, 它知道要調用的是哪個方法, 以及具體是什麽類型定義了該方法。

然後, JIT會在定義該類型的程序集的元數據中查找被調用方法的IL。

接著,JIT驗證IL代碼, 並且將IL代碼編譯成本機CPU指令。本機CPU指令保存到動態分配的內存塊中。

然後,JIT回到CLR為類型創建內部數據結構, 找到與被調用方法對應的那條記錄,

修改最初對JIT的引用, 使其指向內存塊的地址。

最後, JIT 函數跳轉到內存塊中的代碼, 這些代碼正式WriteLine方法, 代碼執行完成返回時,

會回到Main中的代碼, 像往常一樣繼續執行。

可執行EXE在windows調用過程