2008-09-26 84 views
2

运行我们的软件之一时,测试人员遇到了Windows的数据执行预防对话框。跟踪数据执行保护(DEP)

我们试图在开发人员计算机上重现这种情况以进行调试:没有成功。

有谁知道如何找到什么可能导致DEP保护杀死应用程序? 是否有任何现有的工具可用于此?

回答

4

DEP对话框通常只会在您尝试执行来自您未标记为可执行文件的区域的代码时显示。这可能是由于您正在使用的图书馆中有“thunk”引起的,例如ATL窗口。 ATL 8.0中解决此问题。

通过将返回地址设置为不可执行的位置,堆栈捣毁的bug(例如缓冲区溢出)也可能导致此问题。这可能不会导致访问冲突,而是奇怪的行为,如果关闭进程的DEP或硬件上不可用。

如果您抛出C++异常或引发SEH异常,并且您的结构化异常处理程序已被缓冲区溢出删除,也可能发生这种情况。

0

可能我会想,如果您尝试写入未分配的内存,那么这可能是一个可能的结果。可能是删除一个对象然后使用它,或者将一个字符串写入一个太小而不能容纳它的缓冲区。

+0

我知道DEP可以杀死我的应用程序的所有原因。问题是,应用程序是10年持有,包含了大量的代码和库。手工找到可能的原因有些问题。 – Nicolas 2008-09-26 14:49:10

0

DEP受硬件能力的影响。我们最近有一种情况,我们的应用在旧机器上运行良好,但会在新机器上失败。事实证明,尽管旧服务器和新服务器都启用了DEP,但我们在新服务器上崩溃,因为硬件检测更好,更具侵略性,或者类似的东西。因此,如果您的质量检查可以复制,但是DEV不能,那么请尝试使用相同的硬件......尽管质量检查会比开发者拥有更新/更好的PC似乎不合理......我完全相信它!
这里是我对我们最近的经验与笔记: Incompatibilities between Indy 9 and Windows Server 2003?