【问题标题】:What are the implications of using unsafe code使用不安全代码有什么影响
【发布时间】:2010-10-16 22:18:52
【问题描述】:

除了代码本身可以直接访问内存之外。使用“/unsafe”编译器标志和“fixed”关键字的其他含义是什么?对我的 .exe 的代码签名和部署(我的应用仅限桌面)有任何影响吗?

(这与我是否应该这样做无关,为什么在我的问题here 中已涵盖)

【问题讨论】:

    标签: .net clr unmanaged unsafe fixed


    【解决方案1】:

    您可以将含义分为两个类别。

    首先是它如何影响您的应用程序环境。使用不安全代码要求您的程序集在完全信任的环境中运行。无法在受限环境中运行,例如某些 Click Once 安全设置。原因是不安全的代码会阻止 CLR 确保类型安全。单击一次虽然没有安全限制应该没有问题。

    第二个是它对您的编码方式的意义。使用不安全代码通常涉及使用指针,特别是使用它们通过 PInvoke 执行高级编组。但是,这些行为中的任何一个都没有本质上的错误。与“安全”代码相比,它只需要对 CLR 和编组有更多的了解。对象固定是您在开始使用这些功能之前需要牢牢掌握的知识的一个很好的例子。

    【讨论】:

    • 我会 +1 的,但为了迂腐,在使用 fixed 缓冲区和 unsafe 时,固定绝对不是必需的。也许您可以编辑您的问题以反映这一点。
    【解决方案2】:

    不安全的代码是不可验证的,因此您必须注意这一点。在完全信任环境中,这没什么大不了的,但如果您有其他环境的权限集更受限制,那么这可能会影响您。

    【讨论】:

      【解决方案3】:

      要添加到 Jared 对对象固定的引用...

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

      【讨论】:

        猜你喜欢
        • 2011-08-06
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多