c++ - 跟踪数据执行保护 (DEP)

标签 c++ dep

在运行我们的一款软件时,测试人员遇到了 Windows 的数据执行阻止对话框。

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

有谁知道如何找到可能导致 DEP 保护杀死应用程序的原因? 有可用的现有工具吗?

最佳答案

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

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

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

关于c++ - 跟踪数据执行保护 (DEP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/139826/

相关文章:

c++ - 如何删除也是函数返回值的新分配的 char?

c++ - 编译包含 exprTk 的 C++ 文件的问题

asp.net - "Data Execution Prevention"在 Vista 64 上杀死 (VS2008) 本地 ASP.Net 开发服务器(又名 Cassini)

c# - 获取 DEP 设置

c - 当程序集文件包含在项目中时,来自 mmap 的意外执行权限

delphi - 为什么 DEP 不会停止执行从外部文件加载的部分代码?

c++ - 在 C/C++ 中编写 "pointer to something"的好方法

c++ - 如何从两个迭代器创建范围

c++ - 如何任意排序元组的类型?

linux - 在启用 NX (DEP) 和 ASLR 的 x86-64 上利用基于字符串的溢出