【问题标题】:Program I created does not run without DEP disabled我创建的程序在没有禁用 DEP 的情况下无法运行
【发布时间】:2012-11-01 18:54:54
【问题描述】:

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

有人说如果没有禁用 DEP(他有 Windows 7),它就无法工作。

我读了一点关于 DEP 的东西,我知道它会阻止任何试图使用 RAM 运行并假设保存到 Windows 系统的程序...

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

如果有帮助,请提供我网站的链接 - https://sites.google.com/site/chessopeningmaster/

【问题讨论】:

  • 在您的系统上启用 DEP 并对其进行调试。但是对于一个普通的 C# 程序,这不应该发生。您是否在使用任何本机第三方库?
  • 你是什么意思 - 本地等?对不起
  • 关于 32/64 - 我可以为 32 或 64 做一个设置项目。我检查了一下,64 在 32 上不起作用,反之亦然
  • 您包含不是用 C# 编写的 dll。比如用c写的。
  • @galhajaj:重现故障是修复故障的第一步。这就是为什么您应该看到打开 DEP 时会发生什么。

标签: c# windows-7-x64 dep


【解决方案1】:

所有 .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 eExecute,一种由处理器在硬件中实现的数据执行预防机制。关于它的Wikipedia article 还不错。

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

所以这个用户很可能看到你的程序崩溃了,不管出于什么原因,并开始修补他可用的工具。就像关闭 DEP 执法一样。从技术上讲,这有可能阻止了崩溃。然而,这并不意味着程序运行正常。这当然并不意味着您应该关闭此选项。这在技术上可以通过运行带有 /nxcompat:no 选项的 editbin.exe 来实现。

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

【讨论】:

    猜你喜欢
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2012-11-13
    • 2018-04-18
    相关资源
    最近更新 更多