希望这不是一个明显的问题。最近,由于Windows 2008 R2服务器上的32位exe文件缺少数据执行保护(DEP)支持,因此我在例外情况下运行。将exe添加到DEP排除列表中,作为解决方法解决了该问题。
我想编译对DEP的支持,但是在Builder XE5 c ++中找不到有关如何执行此操作的指示。这可能吗?我发现有关Delphi的一些模糊建议,但没有确定的建议。
有任何想法吗?
最佳答案
AFAIK,C ++ Builder没有与Delphi相同的DEP选项。您将要么
使用外部PE编辑器来修改已编译EXE文件的PE标志。
在运行时调用SetProcessDEPPolicy()
,例如在main()
/ Winmain()
函数的顶部:
void EnableDEP()
{
const DWORD PROCESS_DEP_ENABLE = 0x00000001;
typedef BOOL WINAPI (*LP_SPDEPP)(DWORD);
LP_SPDEPP SetProcessDEPPolicy = (LP_SPDEPP) GetProcAddress(GetModuleHandle(TEXT("kernel32")), "SetProcessDEPPolicy");
if (SetProcessDEPPolicy != NULL)
SetProcessDEPPolicy(PROCESS_DEP_ENABLE);
}
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
EnableDEP();
...
}