【问题标题】:Embarcadero Builder C++ XE5 data execution prevention compilerEmbarcadero Builder C++ XE5 数据执行预防编译器
【发布时间】:2015-02-10 01:19:54
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

  • 为什么投反对票?我理解这个问题,它已经清楚地说明了,我确实看到了 Delphi 修复。我的问题是在 C++ Builder 中完成这项工作,而不是 Delphi。
  • 至于 DEP 介入的原因 - 最近发生的变化是从我们的 exe 交互到 Web 服务,这个问题开始了。我无法控制我们用来实现这一目标的 Builder 库。如果可能的话,我想先用标志重新编译,然后看看它是否仍然是一个问题。

标签: c++ c++builder dep


【解决方案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();
        ...
    }
    

【讨论】:

  • 感谢您的评论,雷米。今天将对此进行测试并通知您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多