標籤:http io os 使用 ar for 資料 art div
型別安全代碼只訪問被授權可以訪問的記憶體位置。(在本討論中,型別安全特指記憶體型別安全,不應與範圍更廣的型別安全混淆。)例如,型別安全代碼不能從其他對象的私人欄位讀取值。 它只以定義完善的允許方式訪問類型。
在即時 (JIT) 編譯期間,可選的驗證過程檢查要Just-In-Time 編譯為機器碼的方法的中繼資料和 Microsoft 中繼語言 (MSIL),以驗證它們是否為型別安全。 如果代碼具有忽略驗證的許可權,則將跳過此過程。 有關驗證的更多資訊,請參見託管執行過程。
儘管型別安全驗證對於運行Managed 程式碼不是強制的,但型別安全在程式集隔離和安全性強制中起著至關重要的作用。 如果代碼是型別安全的,則通用語言執行平台可以將程式集彼此間完全隔離。 這種隔離有助於確保程式集之間不會產生負面影響,且提高應用程式的可靠性。 即使型別安全組件的信任層級不同,它們也可以在同一過程中安全地執行。 如果代碼不是型別安全的,則會出現不需要的副作用。 例如,運行時無法阻止Managed 程式碼調用到本機(非託管)代碼中和執行惡意操作。 當代碼是型別安全時,運行時的安全性強制機制確保代碼不會訪問機器碼,除非它有訪問機器碼的許可權。 所有非型別安全的代碼都必須通過傳遞的枚舉成員 SkipVerification 授予SecurityPermission 後才能運行。
型別安全代碼是僅以定義完善的、允許的方式訪問類型的代碼。 例如,給定有效對象引用,型別安全代碼可以按對應於實際欄位成員的固定位移量來訪問記憶體。但是,如果代碼以任意位移量訪問記憶體,該位移量超出了屬於該對象的公開欄位的記憶體範圍,則它就不是型別安全的代碼。
即時 (JIT) 編譯執行稱為驗證的過程,該過程檢查代碼並嘗試確定該代碼是否為型別安全代碼。 驗證過程中被證明屬於型別安全的代碼稱為可驗證為型別安全的代碼。 代碼可以是型別安全代碼,但可能不是可驗證為型別安全的代碼,原因在於驗證過程或編譯器的限制。 並非所有的語言都是型別安全的,有些語言編譯器(如 Microsoft Visual C++)無法產生可驗證為型別安全的代碼。 若要確定所使用的語言編譯器是否產生可驗證為型別安全的代碼,請參見編譯器的文檔。 如果使用的語言編譯器只在您不使用某些語言構造時才產生可驗證為型別安全的代碼,則可能需要使用 Windows 軟體開發包 (SDK) PEVerify 工具來確定代碼是否是可驗證為型別安全的代碼。
如果安全性原則允許未被驗證為型別安全的代碼跳過驗證,則可嘗試執行此類代碼。 但是,因為型別安全是運行時用於分離程式集的機制的重要部分,所以,如果代碼違背型別安全的規則,就不能可靠地實施安全性。 預設情況下,只允許運行從本機電腦產生的非型別安全代碼。 因此,行動程式碼應該是型別安全代碼。
型別安全和安全性