什么是不安全代码(Unsafe code)

Posted on 2010-04-14 23:17  尤里哥  阅读(934)  评论(0编辑  收藏  举报

所谓不安全的代码(Unsafe code)是指编译器无法验证的代码。考虑其安全性,因此称为不安全代码。不安全代码也能在CLR中运行,并且拥有对计算机的完全控制能力。

非托管代码(Unmanaged code):本身特性决定它是不安全的。因为此类代码能够在CLR沙箱(sandbox)之外创建并访问对象实例。然而C++/CLI提供了一种称为内部指针(interior pointer)的东西,如果处理得当的话,非托管代码也能被CLR验证的,因此能被编译成安全的代码。

原生代码(Native code):是指那些在C++/CLI之外被编译的代码,它们是无论如何无法被验证的。原生代码通常以机器语言的形式存在,尽管理论上这并不是必须的。原生代码通常存在于DLL或COM组件中,它由非.net的编译器产生,或者是由.net编译器产生但没使用/clr编译开关。

微软提供了预编译指令#pragma umanaged,允许在安全/托管代码中嵌入非托管代码。实际上,称该指令为原生代码指令更加准确,因为实际嵌入的非托管代码就是原生代码。当然,一旦嵌入了非托管代码,本身就成为了不安全代码。