除了代码本身可以直接访问内存这一事实。使用“/ unsafe”编译器标志和“fixed”关键字的其他含义是什么?是否存在与代码签名和部署我的.exe相关的影响(我的应用程序仅限桌面版)?
(这不是关于我是否应该这样做,为什么包含在我的问题here中)
答案 0 :(得分:14)
您可以将影响分为两个部分。
首先是它如何影响您的应用程序环境。使用不安全的代码要求您的程序集在完全信任环境中运行。无法在受限制的环境中运行,例如某些Click Once安全设置。原因是不安全的代码阻止了CLR确保类型安全。单击一次虽然没有安全限制应该没有问题。
第二个是它对你编码方式的意义。使用不安全的代码通常涉及使用指针,特别是使用它们通过PInvoke执行高级编组。但是,这些行动中没有任何内在错误。它只需要比“安全”代码更多地理解CLR和编组。在您开始使用这些功能之前,对象固定是您需要掌握的知识的一个很好的例子。
答案 1 :(得分:6)
不安全的代码无法验证,因此您必须了解这一点。在完全信任环境中,这不是什么大问题,但如果您有其他环境具有更多限制权限集,那么这可能会对您产生影响。
答案 2 :(得分:3)
添加到Jared对对象固定的引用......
当使用指针直接在C#中访问内存时,您很容易受到CLR在运行时在内存中移动对象的攻击。这意味着你的指针可能突然指向错误的内存部分。 Fixed关键字会将对象固定在内存中,以避免出现此问题。