6

我在 VS2010 中编写程序,构建目标是 .NET 4。我相信DEP兼容性标志默认是打开的。真的吗?

.NET 默认情况下是否也与ASLR兼容,并且默认情况下我的进程是否打开了 ASLR,还是我必须在运行时请求它?

4

1 回答 1

15

是的,自 .NET 2.0 SP1 起,标准 .NET 语言编译器打开了 NXCOMPAT 标志。

借助 JIT 编译器,ASLR 在 .NET 程序中本质上是自动的。它将放置 JIT 编译的机器代码的位置是不可预测的。尽管它很可能在具有完全相同的 CLR 修订号和完全相同的启动代码流以及注入进程的完全相同的 DLL 的完全相同的机器上重复。虽然不容易被恶意软件攻击。自 .NET 3.5 SP1 版本以来,ngen-ed .NET 程序集支持 ASLR。

数据的 ASLR 功能更强大,是针对攻击的更重要的对策。很重要,因为绝大多数攻击都是从恶意数据开始的。每次启动程序时,线程的堆栈位置、GC 堆和静态数据都会发生变化。顺便说一句,您尝试调试 AVE 可能会非常痛苦。

ASLR 可防止已知的不可修补的安全漏洞。安全漏洞必须首先存在,在可验证代码中不常见。

于 2010-07-03T20:14:39.290 回答