所有 .NET 程序,至少从 .NET 2.0 开始,但可能更早,都声明自己与 DEP 兼容。这是通过可执行文件头中的标志来完成的。当您从 Visual Studio 命令提示符对 EXE 运行 dumpbin.exe /headers 时,您可以看到它:
...
2 subsystem (Windows GUI)
8540 DLL characteristics
Dynamic base
NX compatible // <=== here
No structured exception handler
Terminal Server Aware
100000 size of stack reserve
....
“NX”表示Never eXecute,一种由处理器在硬件中实现的数据执行预防机制。关于它的维基百科文章非常好。
这是由任何现代版本的 Windows(XP SP2 和更高版本)和任何现代处理器强制执行的。如果您的程序在您的机器上正确执行,您可以放心地假设您的程序实际上与 DEP 兼容。
所以这个用户可能看到你的程序崩溃了,不管什么原因,并开始修补他可用的工具。就像关闭 DEP 执法一样。从技术上讲,这有可能阻止了崩溃。然而,这并不意味着程序运行正常。这当然并不意味着您应该关闭此选项。这在技术上可以通过运行带有 /nxcompat:no 选项的 editbin.exe 来实现。
如果你想追求这个,那么你应该向用户询问崩溃进程的小型转储。