[C#, CSharp] Managed程式碼的開發與執行
Managed程式碼開發與執行
- 開發流程:
- 使用符合CLS(Common Language Specification)的程式語言開發程式,如C#、VB、C++
- 將原始程式碼編譯成MSIL(Microsoft Intermediate Language)及中繼資料(Meta Data)
即PE(Portable Executable File)
- 編譯可再分為3個步驟:
- 編碼轉換:將原始檔從特定字元集和編特定碼轉換成Unicode字元
- 語彙分析:將字元轉譯成語彙基元
- 句法分析:將語彙基元轉成可執行程式碼
- 使用JIT Compiler將PE轉換成特定CPU的機器碼(Machine Code)
- 執行程式碼
- 說明:
- 中繼資料(Meta Data):
- 描述程式碼中的型別定義、型別成員的簽章(Signature)、程式中參考的成員、Runtime執行時使用的其它資料
- MSIL(Microsoft Intermediate Language):
- 微軟設計的中間碼格式,常簡寫為IL,為與平台無關的中間碼
- PE(Portable Executable File):
- MSIL和Meta Data都會被放在可移植執行檔(Portable Executable File, PE),PE的副檔名為.exe或.dll
- Class Loader:
- 將類別載入記體體
- 載入時會為每個類別的每個method加上一個Stub,用來辨識method是否已經過JIT Compiler編譯,及標明method為Managed或Unmanaged
- JIT Compiler:
- JIT負責在IL第一次執行時將IL編譯成Native Code,依執行需求一次轉換一部份IL成為機器碼
- 轉換時會檢查程式碼是否為型別安全,轉換成機器碼後會儲存起來,下次執行不需重複編譯
- Verifier:
- JIT Compiler的一部份,用來驗證Meta Data是否Well-Formed及IL Code是否Type Safe
- Pre-JITing:
- 利用ngen.exe在安裝時間先將IL編譯成機器碼
- lasm.exe:將MSIL轉換成PE。
- Ilasm.exe可以將IL檔轉換成PE檔(Assembly)
- ilasm HelloWorld /exe 用名為HelloWorld.il的IL檔產生HelloWorld.exe的PE檔
- Ildasm.exe可以閱讀PE檔中的IL碼
Δ 回到最上方
使用Ildasm.exe查看PE檔中的IL碼
- 1執行下列指令:
ildasm HwlloWorld.exe
- 2雙擊Main: void(string[ ])
Δ 回到最上方