0

希望这不是一个明显的问题。由于在 Windows 2008 R2 服务器上的 32 位 exe 中缺乏数据执行保护 (DEP) 支持,我最近遇到了异常。将 exe 添加到 DEP 排除列表中,作为解决方法解决了该问题。

我想在支持 DEP 的情况下进行编译,但在 Builder XE5 c++ 中找不到有关如何执行此操作的任何指示。这可能吗?我为 Delphi 找到了一些模糊的建议,但没有明确的建议。

有任何想法吗?

4

1 回答 1

1

AFAIK,C++Builder 没有与 Delphi 相同的 DEP 选项。您将不得不

  1. 使用外部 PE 编辑器修改已编译 EXE 文件的 PE 标志。

  2. 在运行时调用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();
        ...
    }
    
于 2014-12-12T23:14:14.877 回答