CEF(Chromium Embedded Framework)与DEP(数据执行预防)

时间:2014-01-21 11:17:48

标签: delphi delphi-7 chromium-embedded dep

我正在使用DCEF3(https://code.google.com/p/dcef3/)和Delphi 7。

嵌入DCEF的CEF版本为3.1547.1412。

问题

在使用Windows 2008 R2的计算机上,有时我的应用程序加载时,它会因类型为 BEX 的事件而崩溃。

我只能解决崩溃停用窗口上的DEP ,为此我使用了提示命令:

bdcedit /set nx AlwaysOff

但这不是解决方案。

我无法强迫用户在其服务器上禁用 DEP。

以下是APPCRASH报告(葡萄牙文):

    Assinatura do problema:
      Nome do Evento de Problema:         BEX
      Nome do Aplicativo:                          MyExecutable.exe
      Versão do Aplicativo:                         1.1.0.1
      Carimbo de Data/Hora do Aplicativo:            2a425e19
      Nome do Módulo de Falhas:            dhcpcsvc6.DLL
      Versão do Módulo de Falhas:           6.1.7601.17970
      Carimbo de Data/Hora do Módulo de Falhas:              50745f7c
      Deslocamento de Exceção:               00001730
      Código de Exceção:                            c0000005
      Dados de Exceção:                             00000008
      Versão do sistema operacional:        6.1.7601.2.1.0.18.10
      Identificação da Localidade:             1046
      Informações Adicionais 1:                 a7aa
      Informações Adicionais 2:                 a7aa91f17ea749d42a4de3b390fa5b3d
      Informações Adicionais 3:                 a7aa
      Informações Adicionais 4:                 a7aa91f17ea749d42a4de3b390fa5b3d

有人可以帮助我找到问题的根源或有关为何发生这种情况的一些信息吗?

2 个答案:

答案 0 :(得分:2)

在评论中,您可以通过调用forum that explains that Chromium intentionally enables data execution prevention链接到SetProcessDEPPolicyDEP is known to interfere with Delphi 7.从这个角度来看,我看到了三个解决方案(按降序排列顺序列出):

  1. 升级到不到十年的Delphi版本。您将获得一个可识别DEP的RTL。
  2. 如论坛所述,自己编译Chromium并排除与DEP相关的代码。您可以这样做,例如,通过修改ApplyProcessMitigationsToCurrentProcess in process_mitigations.cc使其忽略MITIGATION_DEPMITIGATION_DEP_NO_ATL_THUNK标记。
  3. 运行bcdedit,正如您已经找到的那样。执行此操作时,您将在操作系统级别禁用DEP,这会强制Chromium对SetProcessDEPPolicy的调用失败。

答案 1 :(得分:0)

根据这篇文章:

我添加了以下指令以将标题添加到TSAWARE信息:

{$SETPEOPTFLAGS $8000}

经过一些详尽的测试后,问题就停止了。