【问题标题】:C# compiler flagsC# 编译器标志
【发布时间】:2018-06-03 15:48:45
【问题描述】:

我了解 C# 可以编译为类似于 Java 的字节码,但是是否有任何编译器标志,如适用于 C# 的 C/C++ 的 safeseh 或 gs 标志?我不确定它们是否有必要,因为大概所有这些东西都在 CLR 中实现了?

【问题讨论】:

  • @CamiloTerevinto 他正在就两个编译器标志做一个非常精确的问题,一个用于保护缓冲区溢出 (gs),另一个用于 SEH 处理,这与 Windows 异常有关。从here 看来,这似乎与针对攻击的安全性有关。我不认为给他一个空白的旗帜列表会对他有多大帮助
  • 我不确定这里所有反对票的原因是什么。这似乎是一个合理的问题,C# 专家应该能够很容易地回答。果然……

标签: c# windows visual-studio


【解决方案1】:

我记得 C# 编译器中没有安全标志,如果我们排除 /unsafe 会禁用使用原始 C 指针编写 C# 代码的可能性。即使没有该标志,您通常也可以以其他可以编译的方式编写等效的“不安全”代码,因此该标志是一个红鲱鱼。

由于字符串和数组的处理方式,.NET 中免费提供了针对缓冲区溢出和类似攻击的保护。您不能在数组结束后写入(几乎所有其他 .NET 集合在内部都基于数组),并且您不能写入 strings(它们是不可变的,当您分配它们时,您为它们的内容分配“正确”的大小,这是在创建string 时决定和固定的)。

请注意,您仍然可以很容易地使 C# 程序崩溃(例如通过传递非法数据......当需要一个数字时的文​​本),但这种崩溃(实际上通常是一个 Exception)不会允许您控制机器,或覆盖内存。

【讨论】:

    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多