Embarcadero Builder C++ XE5 数据执行保护编译器

Embarcadero Builder C++ XE5 data execution prevention compiler

本文关键字:执行 保护 编译器 数据 XE5 Builder C++ Embarcadero      更新时间:2023-10-16

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

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

有什么想法吗?

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();
        ...
    }