希望这不是一个明显的问题。由于在 Windows 2008 R2 服务器上的 32 位 exe 中缺乏数据执行保护 (DEP) 支持,我最近遇到了异常。将 exe 添加到 DEP 排除列表中,作为解决方法解决了该问题。
我想在支持 DEP 的情况下进行编译,但在 Builder XE5 c++ 中找不到有关如何执行此操作的任何指示。这可能吗?我为 Delphi 找到了一些模糊的建议,但没有明确的建议。
有任何想法吗?
希望这不是一个明显的问题。由于在 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();
...
}