当前位置:  开发笔记 > 编程语言 > 正文

如何使我的程序DEP兼容?

如何解决《如何使我的程序DEP兼容?》经验,为你挑选了3个好方法。

我有一个Windows窗体(.net 3.0)项目,由于DEP错误,该项目无法在我客户的vista计算机上运行.它在我的vista机器上运行,并在虚拟机中的vista sp1的干净版本中运行.我无法找到使我的程序DEP,数据执行保护兼容的方法.我真的无法做任何事情来结束用户机器,它只需要运行.这个最新的vista开发噩梦有什么办法吗?我的程序使用devexpress控件,sql express和.net即web浏览器控件.我已经跳出了ie控件,但无济于事.我有其他程序在同一台机器上使用devexpress和sql express,它们运行正常.我无法在用户的计算机上进行调试.



1> RoadWarrior..:

DEP以两种模式之一运行:

1)硬件DEP用于可以将内存页标记为不可执行的CPU.这有助于防止某些漏洞利用,例如缓冲区溢出.

2)软件DEP适用于没有硬件DEP支持的CPU.它不会阻止在数据页中执行代码,而是阻止SEH覆盖(另一种类型的攻击).

在具有支持它的CPU的Windows XP上,默认情况下仅对某些Windows系统二进制文件以及选择"选择加入"的程序启用硬件DEP.

在具有支持它的CPU的Vista上,默认情况下几乎所有进程都启用硬件DEP.这有时可能会出现问题,通常是针对较旧的程序和驱动程序,以及未进行任何Vista测试的ISV.

所以我怀疑第一步是发现你是在处理软件还是硬件DEP.另外,您使用的是C#/ VB还是托管C++?你使用任何本机代码或组件?如果您的应用程序使用本机组件或使用旧ATL框架构建的ActiveX控件,那么您的应用程序很可能会因硬件DEP而失败.

从.NET Framework 2.0 SP1开始,我相信C#编译器会发出与DEP兼容的托管代码.但是,如果您的应用程序正在生成DEP异常,那么您可以尝试清除可执行文件的IMAGE_DLLCHARACTERISTICS_NX_COMPAT标志.为此,您可以使用VC工具集中的EDITBIN.EXE,如下所示:

editbin.exe /NXCOMPAT:NO 

如果您使用的是Visual Studio,则可以在可执行文件的项目中添加一个生成后步骤.您需要设置环境,以便可以解析EDITBIN的依赖关系.当我使用本机代码作为我的应用程序的一部分时,后构建步骤如下所示:

call $(DevEnvDir)..\tools\vsvars32.bat
editbin.exe /NXCOMPAT:NO $(TargetPath)  



2> mackenir..:

较旧版本的ATL不支持DEP,因此如果您使用任何使用ATL构建的ActiveX控件,并且构建在该版本的ATL(我认为版本7.1及更低版本)上,您将获得DEP错误.

作为最后的手段,您实际上可以通过调用API函数来禁用进程的DEP : SetProcessDEPPolicy.

有关SetProcessDEPPolicy的更多信息



3> Hans Passant..:

.NET 2.0 SP1附带的编译器打开可执行文件头中的NXCOMPAT标志.您可以通过使用/ NXCOMPAT:NO选项运行EditBin.exe,在Post Build步骤中关闭该标志.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有