运行我们的软件时,测试人员面临Windows的数据执行保护对话框。

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

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

有帮助吗?

解决方案

DEP对话框通常仅在您尝试从未标记为可执行文件的区域执行代码时显示。这可能是由您正在使用的库中的“thunks”引起的,例如ATL窗口。此问题已在ATL 8.0中修复。

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

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

其他提示

我可能会认为,每当你尝试写入未分配的内存时,这都是可能的结果。可能是删除一个对象然后使用它,或者将一个字符串写入一个太小而无法容纳它的缓冲区。

DEP受硬件功能的影响。我们最近有一种情况,我们的应用程序在旧机器上运行良好,但在新机器上会失败。事实证明,虽然在旧服务器和新服务器上都启用了DEP,但我们在新服务器上崩溃了,因为硬件检测更好,更具侵略性,或类似的东西。因此,如果您的QA可以重现,但DEV不能,那么尝试使用相同的硬件......尽管QA会比开发人员拥有更新/更好的PC似乎是不合理的...我完全相信它!
以下是我对近期经验的说明: Indy 9与Windows Server 2003之间的不兼容性?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top