我创建的程序在没有禁用DEP的情况下运行

时间:2012-11-01 18:54:54

标签: c# windows-7-x64 dep

我开发了一个程序(在C#Winforms中)并通过我创建的Google网站进行分发。

我收到了某人的评论,如果没有DEP禁用它就无法运行(他有Windows 7)。

我读了一些关于DEP的事情,我明白它会阻止任何尝试使用RAM运行的程序,而这些程序可以保存到windows系统......

这是我在开发程序时所做的事情吗?我为该程序创建了一个安装项目,因此它创建了一个msi文件。有没有办法阻止我的程序在RAM上运行那些禁止的部分(如果我当然理解正确的话)?

指向我网站的链接,如果有帮助的话 - https://sites.google.com/site/chessopeningmaster/

1 个答案:

答案 0 :(得分:2)

所有.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,是处理器在硬件中实现的数据执行防止机制。关于它的Wikipedia article非常好。

这是由任何现代版本的Windows(XP SP2及更高版本)和任何现代处理器强制执行的。如果您的程序在您的计算机上正确执行,您可以放心地假设您的程序实际上与DEP兼容。

因此,无论出于何种原因,该用户可能会看到您的程序崩溃,并开始修改他可用的工具。就像关闭DEP执法一样。从技术上讲,这可能会阻止崩溃。但这并不意味着程序运行正常。这绝对不意味着你应该关掉这个选项。通过使用/ nxcompat:no选项运行editbin.exe在技术上是可行的。

如果您想继续这样做,那么您应该向用户询问崩溃过程的小型转储。