撰寫可驗證的型別安全程式碼

型別安全程式碼是只以妥善定義且允許的方式存取型別的程式碼。例如,在有一個有效的物件參考上,安全型別程式碼可以存取和實際欄位編號對應的固定位移上的記憶體。然而,如果程式碼存取的記憶體,是位於該物件開放欄位所屬記憶體範圍以外的任意位移時,即不是安全型別。

JIT 編譯會執行驗證程序,檢查程式碼並判斷其是否為型別安全的程式碼。在驗證程序中證明為安全型別的程式碼則稱為安全型別程式碼。因為編譯器本身的驗證程序限制,程式碼在尚未驗證為安全型別時也可以是安全型別。並非所有的語言都屬於安全型別,部分的語言編譯器 (如 Microsoft Visual C++) 即無法產生可驗證的安全型別 Managed 程式碼。若要決定您使用的語言編譯器是否可產生可驗證的安全型別程式碼,請參閱編譯器的說明文件。如果您使用的語言編譯器只有在不使用某些語言建構時才會產生可驗證的安全型別程式碼,您可能需要使用 .NET Framework SDK PEVerify 工具來判斷您的程式碼是否為可驗證的安全型別。

證明為不屬於安全型別的程式碼當安全性原則允許略過驗證程序時,也可以嘗試執行。然而,因為型別安全是 Runtime 機制下隔離組件的重要部分,當程式碼破壞了型別安全規則時,就無法獲得可靠的安全性。依預設值,不屬於安全型別的程式碼若非從在本機電腦上產生,便不得執行。因此,行動程式碼也應該是安全型別的。

請參閱

參考

PEVerify 工具 (Peverify.exe)

概念

程式碼存取安全性的基本概念
將 MSIL 編譯成機器碼

其他資源

程式碼存取安全性