编写可验证为类型安全的代码
类型安全代码是仅以定义完善的、允许的方式访问类型的代码。 例如,给定有效的对象引用,类型安全代码可以按对应于实际字段成员的固定偏移量来访问内存。 但是,如果代码以任意偏移量访问内存,该偏移量超出了属于该对象的公开字段的内存范围,则它就不是类型安全的代码。
实时 (JIT) 编译执行称为验证的过程,该过程检查代码并尝试确定该代码是否为类型安全代码。 验证过程中被证明属于类型安全的代码称为可验证为类型安全的代码。 代码可以是类型安全代码,但可能不是可验证为类型安全的代码,原因在于验证过程或编译器的限制。 并非所有的语言都是类型安全的,有些语言编译器(如 Microsoft Visual C++)无法生成可验证为类型安全的代码。 若要确定所使用的语言编译器是否生成可验证为类型安全的代码,请参见编译器的文档。 如果使用的语言编译器只在您不使用某些语言构造时才生成可验证为类型安全的代码,则可能需要使用 Windows 软件开发包 (SDK) PEVerify 工具来确定代码是否是可验证为类型安全的代码。
如果安全策略允许未被验证为类型安全的代码跳过验证,则可尝试执行此类代码。 但是,因为类型安全是运行时用于分离程序集的机制的重要部分,所以,如果代码违背类型安全的规则,就不能可靠地实施安全性。 默认情况下,只允许运行从本地计算机生成的非类型安全代码。 因此,移动代码应该是类型安全代码。