C#编译器标志

时间:2018-06-03 15:48:45

标签: c# windows visual-studio

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

1 个答案:

答案 0 :(得分:3)

我记得在C#编译器中没有安全标志,如果我们排除了/unsafe,它禁止用原始C指针编写C#代码的可能性。即使没有那个标志,你也可以用其他编译方式编写等效的“不安全”代码,这样标志就是一个红色的鲱鱼。

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

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