c# - C# 编译器标志
问题描述
我了解 C# 编译为类似于 Java 的字节码,但是是否有任何编译器标志,如适用于 C# 的 C/C++ 的 safeseh 或 gs 标志?我不确定它们是否有必要,因为大概所有这些东西都是在 CLR 中实现的?
解决方案
我记得 C# 编译器中没有安全标志,如果我们排除/unsafe
那些禁用使用原始 C 指针编写 C# 代码的可能性的安全标志。即使没有该标志,您通常也可以以其他可以编译的方式编写等效的“不安全”代码,因此该标志是一个红鲱鱼。
由于字符串和数组的处理方式,.NET 中免费提供了针对缓冲区溢出和类似攻击的保护。您不能在数组结束后写入(几乎所有其他 .NET 集合在内部都基于数组),并且您不能写入string
s(它们是不可变的,当您分配它们时,您将它们分配给他们内容的“正确”大小,在创建string
) 时决定并固定。
请注意,您仍然可以轻松地使 C# 程序崩溃(例如通过传递非法数据......当需要一个数字时的文本),但是这种崩溃(实际上通常是一个Exception
)不允许您控制机器,或覆盖内存。
推荐阅读
- c# - C# XAMPP 连接
- javascript - 解析错误:前缀操作中的左侧无效
- c++ - 在 SEAL 2.3.1 中设置 FractionalEncoder
- ios - 无效更新:尝试展开和折叠 UITableView 部分时,第 0 部分中的行数无效
- c# - 将序列化的 XML 导入 SQL 表时遇到问题
- c++11 - 为什么我在 g++ 4.8.5 中收到此程序的编译错误?
- node.js - 安装node-sass的权限问题
- r - 将数据框函数传递给 gstat 公式参数
- assembly - NASM 中的变量声明和 stx/etx
- meteor - 有人知道任何 Meteor 模板滑块吗?