c# - 不安全代码对安全代码有影响吗?

标签 c# .net unsafe

据我所知,将一个方法标记为不安全将禁用对该代码的一些 CLR 检查,但这对系统的其余部分是否安全有任何影响,除了 DLL/EXE 可以不在不受信任的环境中运行。

特别是,

  1. 是否有任何安全检查因为标记为不安全而无法在完整的 dll 上运行?
  2. 如果一个 DLL 被标记为不安全,但标记为不安全的方法是 实际上没有被调用,这是否与 DLL 被标记为 安全吗?
  3. 将不安全代码保存在 单独的 DLL?

我在 64 位窗口上重绘嵌套控件时遇到问题,详见 here一种解决方案(似乎有效的一种)涉及不安全的代码,我想了解添加此代码对我的项目的影响。

最佳答案

不安全代码能够破坏托管堆。因此,在同一进程 中运行的任何内容都可能受到影响。

这包括同一进程中的所有其他和可能的所有其他AppDomains


更新

举个例子: http://blogs.msdn.com/b/tess/archive/2006/02/09/net-crash-managed-heap-corruption-calling-unmanaged-code.aspx


更新 2

Is unsafe code that is written diligently bad?

没有。 .NET 框架本身有 不安全代码。示例很多,但这里是 System.String 中的一个:

public static unsafe string Copy(string str)
{
    if (str == null)
    {
        throw new ArgumentNullException("str");
    }
    int length = str.Length;
    string str2 = FastAllocateString(length);
    fixed (char* chRef = &str2.m_firstChar)
    {
        fixed (char* chRef2 = &str.m_firstChar)
        {
            wstrcpyPtrAligned(chRef, chRef2, length);
        }
    }
    return str2;
}

关于c# - 不安全代码对安全代码有影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677346/

相关文章:

C# CultureInfo.CurrentCulture 说 en_US 但我的 Windows 设置设置为南非

c# - ListBox 作为 WPF 中的 Numeric UpDown 控件

c# - 使用正则表达式忽略带有数字的字符串中的日期

java - 程序对 2d ArrayList[][] 使用未经检查或不安全的操作

rust - 别名可变原始指针 (*mut T) 会导致未定义的行为吗?

c# - 有没有更好的方法来设置 linq 中项目列表的公共(public)属性

c# - 使用 .Net System.Numeric 的新矢量仅填充矢量长度的一半

c# - 从逗号分隔字符串中的键值对中获取值

.net - WCF WSDL 摆脱 qXX 命名空间

java - java unsafe中getXXXVolatile与getXXX有什么区别?