首页 > 解决方案 > C# 编译器标志

问题描述

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

标签: c#windowsvisual-studio

解决方案


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

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

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


推荐阅读