CEF (Chromium Embedded Framework) против DEP (предотвращение выполнения данных)

Я использую DCEF3 (https://code.google.com/p/dcef3/ ) с помощью Delphi 7.

Версия CEF, встроенная в DCEF, - 3.1547.1412.

Проблема

На машинах с Windows 2008 R2 иногда при загрузке моего приложения происходит сбой с событием типа BEX.

Мне удалось решить только сбой деактивации DEP в Windows, для этого я использовал команду командной строки:

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

Может ли кто-нибудь помочь мне найти корень проблемы или информацию о том, почему это происходит?


person Beto Neto    schedule 21.01.2014    source источник
comment
Можете ли вы воспроизвести это с помощью небольшого тестового приложения со встроенным Chromium? Если так, то здесь людям будет намного легче ответить. Ваше большое приложение может делать любое количество вещей, которые плохо взаимодействуют с CEF. Вы ищете SSCCE, который может оказаться сложным к тому времени, когда вы встраиваете компоненты, но, пожалуйста, сделайте все возможное.   -  person David    schedule 21.01.2014
comment
Также в этой статье указано, что SysUtils в Delphi 7 может запускать DEP , и вам необходимо выполнить обновление до D2005 или более поздней версии, чтобы исправить это. (Однако в статье есть ссылка на патч.) Delphi 7 невероятно древний, поэтому неудивительно, что он делает вещи, неприемлемые для версий Windows, написанных после того, как он был выпущен. Мое стандартное предложение всем, кто использует D7, - все равно обновиться :)   -  person David    schedule 21.01.2014
comment
@David: эта проблема начинается после того, как я встроил CEF, и я не могу перейти на более новую версию delphi. Я попробую создать тестовое приложение, но не гарантирую, что воспроизведу проблему.   -  person Beto Neto    schedule 21.01.2014
comment
Взгляните на информационный мир. com / d / security / и magpcss.org/ceforum /viewtopic.php?f=6&t=11247   -  person Beto Neto    schedule 21.01.2014


Ответы (2)


В комментариях вы ссылаетесь на форум , где объясняется, что Chromium намеренно разрешает выполнение данных. предотвращения, позвонив по телефону SetProcessDEPPolicy. известно, что DEP мешает работе Delphi 7. В этом свете Я вижу три решения (перечисленных в порядке убывания предпочтений):

  1. Выполните обновление до версии Delphi, которой меньше десяти лет. Вы получите RTL с поддержкой DEP.
  2. Как упоминалось на форуме, скомпилируйте Chromium самостоятельно и исключите код, связанный с DEP. Вы можете сделать это, например, отредактировав _ 2_ в process_mitigations.cc, чтобы он игнорировал флаги MITIGATION_DEP и MITIGATION_DEP_NO_ATL_THUNK.
  3. Запустите bcdedit, как вы уже обнаружили. Когда вы это делаете, вы отключаете DEP на уровне ОС, и это приводит к сбою вызовов Chromium к SetProcessDEPPolicy.
person Rob Kennedy    schedule 21.01.2014
comment
(6 лет спустя ..) Итак, у меня похожая проблема, но с другой проблемой, дочерней устаревшей DLL. Я попробовал ваше предложение перекомпилировать Chrome с удаленным кодом DEP. Проблема в том, что указанный выше код не входит в состав CEF. Единственная поставленная Chromium dll - это chrome_elf.dll. Указанный выше код компилируется в sandbox.dll. Если это не будет каким-то образом объединено в одну из библиотек CEF, это кажется тупиком. - person Kinetic; 28.01.2020

Согласно этим статьям:

Я добавил следующую директиву, чтобы добавить в заголовок информацию TSAWARE:

{$SETPEOPTFLAGS $8000}

После некоторых исчерпывающих тестов проблема прекратилась.

person Beto Neto    schedule 22.01.2014