希望这不是一个明显的问题。最近,由于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();
    ...
}

07-28 14:08