CEF(Chromium嵌入式框架)与DEP(数据执行预防)



我正在使用delphi 7。

带有DCEF的CEF版本为3.1547.1412。

问题

在带有Windows 2008 R2的计算机上,有时我的应用程序加载时,它会以类型 bex 的事件崩溃。

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

bdcedit /set nx AlwaysOff

,但这不是解决方案。

我不能在其服务器上迫使用户 desable 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

有人可以帮助我找到问题的根源或有关为什么会发生的一些信息?

在评论中,您链接到一个论坛,该论坛解释说,铬有意通过调用SetProcessDEPPolicy来预防数据执行。众所周知,DEP会干扰Delphi 7.在那一句白中,我看到了三种解决方案(以降序列出顺序列出):

  1. 升级到不到十年的Delphi版本。您会得到一个dep-ware的RTL。
  2. 如论坛中所述,请自己编译铬并排除与DEP相关的代码。例如,您可以通过在 process_mitigations.cc 中编辑ApplyProcessMitigationsToCurrentProcess来做到这一点,以使其忽略MITIGATION_DEPMITIGATION_DEP_NO_ATL_THUNK标志。
  3. 正如您已经发现的那样,运行bcdedit。当您这样做时,您可以在操作系统级别禁用DEP,这会迫使Chromium对SetProcessDEPPolicy的电话失败。

根据此文章:

  • delphi应用程序和tsaware标头标志

  • http://support.microsoft.com/kb/2279689

我添加了以下指令,以添加到标题tsaware信息:

{$SETPEOPTFLAGS $8000}

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

最新更新