跟踪数据执行保护(DEP)
时间:2020-03-06 14:47:12 来源:igfitidea点击:
当运行我们的一种软件时,测试人员会遇到Windows的"数据执行阻止"对话框。
我们尝试在开发人员计算机上重现这种情况以进行调试:但未成功。
有谁知道如何找到可能导致DEP保护终止应用程序的原因?
有没有可用的现有工具?
解决方案
潜在地,我认为我们每次尝试写入未分配的内存都可能会导致这种情况。可能是删除对象然后再使用它,或者将字符串写到缓冲区中而无法容纳它的任何东西。
通常,仅当我们尝试从未标记为可执行文件的区域中执行代码时,才会显示DEP对话框。这可能是由我们正在使用的库中的" thunk"引起的,例如ATL窗口化。 ATL 8.0中解决此问题。
例如,通过将返回地址设置为不可执行的位置,可以将发生堆栈破坏的错误(例如缓冲区溢出)也引起此问题。如果为该过程关闭了DEP或者在硬件上不可用,则这可能不会导致访问冲突,但是会产生奇怪的行为。
如果引发C ++异常或者引发SEH异常,并且结构化异常处理程序已被缓冲区溢出所破坏,也可能会发生这种情况。
DEP受硬件功能的存在影响。最近,我们遇到了这样的情况:我们的应用在旧计算机上可以正常运行,但在新计算机上可能会失败。事实证明,尽管在旧服务器和新服务器上都启用了DEP,但由于硬件检测更好,更具攻击性或者类似原因,我们在新服务器上崩溃了。因此,如果QA可以重现,但DEV无法重现,则可以使用相同的硬件进行尝试...尽管QA拥有比开发人员更新/更好的PC似乎是不合理的...我完全相信!
这是我最近在此方面的经历的注释:
Indy 9和Windows Server 2003之间不兼容?