我知道 C# 可以编译成类似于 Java 的字节码,但是是否有任何编译器标志,例如适用于 C# 的 C/C++ 的 safeseh 或 gs 标志?我不确定它们是否有必要,因为大概所有这些东西都在 CLR 中实现了?
我记得在 C# 编译器中没有安全标志,如果我们排除/unsafe
禁止使用原始 C 指针编写 C# 代码的可能性。即使没有该标志,您通常也可以以其他方式编写等效的“不安全”代码以进行编译,因此该标志是一个红鲱鱼。
由于字符串和数组的处理方式,.NET 中免费提供了针对缓冲区溢出和类似攻击的保护。您不能在数组结尾之后写入(并且几乎所有其他 .NET 集合在内部都基于数组),并且您不能写入string
s(它们是不可变的,当您分配它们时,您分配它们其内容的“正确”大小,这是在创建string
)时决定和固定的。
请注意,您仍然可以轻松地使 C# 程序崩溃(例如,通过传递非法数据......当需要数字时发送文本),但是这种崩溃(实际上通常是一个Exception
)不允许您控制机器,或覆盖内存片段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句