使用不安全的代码有哪些影响?

25

除了代码本身可以直接访问内存之外,使用 "/unsafe" 编译器标志和 "fixed" 关键字还有其他意义吗?与代码签名和部署 .exe 相关的任何连锁反应吗?(我的应用程序仅限桌面)

(这不是关于我是否应该这样做的问题,"why"已在我的问题这里中涵盖)

3个回答

16

这个内容可以分成两个方面来考虑。

第一个是它对应用环境的影响。使用不安全代码需要在完全信任的环境下运行程序集,无法在某些限制性环境中运行,例如某些Click Once安全设置。原因在于不安全代码会阻止CLR确保类型安全。不过,没有安全限制的Click Once则不会有问题。

第二个是它对编码方式的影响。使用不安全代码通常涉及使用指针,特别是通过PInvoke执行高级封送。这些行为本质上没有什么问题,只是要求对CLR和封送有比“安全”代码更多的理解。对象固定就是一个很好的例子,你需要充分理解它才能开始使用这些特性。


我本来想点个赞的,但是说实话,在使用fixed缓冲区和unsafe时,固定内存地址并不是必需的。也许你可以编辑一下你的问题以反映这一点。 - Engineer

7

不安全的代码是不可验证的,因此您需要意识到这一点。在完全信任的环境中,这不是什么大问题,但如果您有其他权限设置更加受限的环境,则可能会对您产生影响。


3

除了Jared提到的对象固定参考之外...

在C#中直接使用指针访问内存时,您容易受到CLR在运行时移动对象的影响。这意味着您的指针可能会突然指向错误的内存部分。 Fixed 关键字将固定对象在内存中,以避免此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接