【问题标题】:Why does FogBugz require that the DEP is turned off? [closed]为什么 FogBugz 要求关闭 DEP? [关闭]
【发布时间】:2009-01-04 19:48:51
【问题描述】:

我真的很想知道为什么 FogBugz 在本地安装时坚持 DEP 已关闭?

【问题讨论】:

  • 大概是因为它做了一些不好的事情,如果启用就会触发 DEP 违规... ;)
  • 有趣,这对我来说是个大问题。我认为 FogBugz 是相当不错的软件(根据规范),但不能在 DEP 下工作表明存在可疑的编程做法(可能是 FogBugz 使用的第三方软件,所以可能不是他们的错)。
  • 这不是一个操作方法问题,但它与编程无关? DEP 是现代编程实践的基础。
  • 我同意斯蒂芬·马丁的观点。 :)

标签: fogbugz dep data-execution-prevention


【解决方案1】:

FogBugz 6(及更早版本)要求在具有 DEP 的 Windows 版本上禁用数据执行保护 (DEP),因为我们用于解析电子邮件的第三方 COM 组件。我们将在 FogBugz 的下一个主要版本中修复这个问题:FogBugz 将不再使用这个第三方组件(事实上,下一个版本的 FogBugz 将不会使用 任何 COM 组件)。

【讨论】:

    【解决方案2】:

    打开它,用调试器查看它在哪里崩溃 :) 我遇到了一些 COM 组件,这些组件会从触发 DEP 异常的数据块执行一些代码。我愿意猜测 FogBugz 也在某处访问一些正在做同样事情的本机组件。

    【讨论】:

      【解决方案3】:

      除非禁用 DEP 或为已安装的挂钩设置适当的 memory protection 选项,否则尝试修补或插入挂钩到其地址空间内的其他模块的代码通常不起作用。

      这是一些框架(例如 Delphi)的常用技术,其中“补丁”在运行时动态应用以修复供应商尚未解决的错误。

      【讨论】:

        【解决方案4】:

        我只是不喜欢在服务器环境中关闭 DEP 的想法,因为现代最先进的软件无法处理它。特别是因为它是我多年来尝试过的唯一需要它的软件。

        我在安装过程中遇到了 DEP 警报。

        正如上面的 FogBugz 链接所说,“但是请注意,FogBugz 在启用 DEP 的情况下将无法正常运行。”。

        【讨论】:

          【解决方案5】:

          不知道 FogBugz 的具体情况,但是...

          关闭 DEP 的最常见原因是在堆栈或堆上以编程方式生成的 thunk。 Windows 内核模拟最常见的内核,但“最常见”的覆盖范围不是很好。

          关闭 DEP 的第二个最常见原因是错误链接的代码段似乎是数据段。

          第三个最常见的原因是字符串中的机器码。总的来说,这是一种非常糟糕的风格,但有时在 Windows 上却无济于事。

          第四个最常见的原因是代码中的某些算法假定了堆栈布局。 DEP 搞砸了。

          或者程序可能真的在堆缓冲区上运行代码。

          【讨论】:

          • DEP 如何影响堆栈布局?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-01
          • 2017-02-17
          相关资源
          最近更新 更多