[C#, CSharp, C Sharp 教學 教程 教材 Tutorial] Managed程式碼的開發與執行(Managed Program Develop & Execute)
YehYeh\'s Notepad yehyeh@gmail.com 

[C#, CSharp] Managed程式碼的開發與執行

Managed程式碼開發與執行

  • 開發流程:
    1. 使用符合CLS(Common Language Specification)的程式語言開發程式,如C#、VB、C++
    2. 將原始程式碼編譯成MSIL(Microsoft Intermediate Language)及中繼資料(Meta Data)
      PE(Portable Executable File)
      • 編譯可再分為3個步驟:
        1. 編碼轉換:將原始檔從特定字元集和編特定碼轉換成Unicode字元
        2. 語彙分析:將字元轉譯成語彙基元
        3. 句法分析:將語彙基元轉成可執行程式碼
    3. 使用JIT Compiler將PE轉換成特定CPU的機器碼(Machine Code)
    4. 執行程式碼
  • Managed程式碼編譯與執行
  • 說明:
    • 中繼資料(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[ ])
    使用Ildasm.exe查看PE檔中的IL碼
Δ 回到最上方