Включить безопасную обработку исключений в C++ Builder
для сертификации приложений Windows 8 существуют (среди прочего) следующие требования:
- 3.2 ваше приложение должно быть скомпилировано с помощью
/SafeSEH
флаг для обеспечения безопасной обработки исключений - 3.3 ваше приложение должно быть скомпилировано с помощью
/NXCOMPAT
флаг для предотвращения выполнения данных - 3.4 ваше приложение должно быть скомпилировано с помощью
/DYNAMICBASE
флаг для рандомизации макета адресного пространства (ASLR)
Я не смог найти, Как включить любой из них в C++Builder XE.
на /NXCOMPAT
и /DYNAMICBASE
можно использовать editbin.exe
от VS или peflags.exe
из Cygwin. Хотя я был бы более уверен в возможных побочных эффектах, если бы был родной способ включить их.
в любом случае, я полностью в недоумении относительно /SafeSEH
.
2 ответов
во-первых, /SafeSEH применяется только к x86, а не x64 или ARM. Это требует, чтобы компилятор создавал дополнительные таблицы, указывающие адреса функций, которые считаются допустимыми обработчиками исключений по соображениям безопасности. Есть небольшой шанс, что вы могли бы сделать это сами, но это потребует, чтобы вы посмотрели на fs:0
цепочка обработки исключений в скомпилированном коде сборки и перечислите все адреса, которые когда-либо были нажаты в этой цепочке, а затем опишите их, как описано здесь: http://msdn.microsoft.com/en-us/library/9a89h429 (v=VS.80).aspx. Существует (тонкий) шанс, что ваш код на самом деле не имеет никаких обработчиков, и все они находятся во время выполнения C++Builder (может облегчить работу, если среда выполнения является отдельной DLL).
вы должны попытаться убедить C++Builder обновить свой компилятор для поддержки SafeSEH. Он был вокруг в платформе Windows с XP SP2 и подключает довольно неприятную дыру безопасности (адреса обработчиков исключений существуют в стеке в x86, просто ожидая переполнения буфера, чтобы поместить любой случайный адрес там, чтобы быть выполненным)
на вопрос /NXCOMPAT
и /DYNAMICBASE
, Я создал запрос для компоновщика C++ Builder для поддержки этих флагов здесь:https://quality.embarcadero.com/browse/RSP-13072
используя editbin.exe
из Visual C++ вряд ли является идеальным решением, и их компоновщик должен поддерживать эти флаги изначально.
обновление: здесь был создан дополнительный запрос на распространение файлов среды выполнения C++ Builder / Delphi (DLL / BPLs) с этими флагами уже установлены, чтобы избежать необходимости использовать EDITBIN из Visual C++, чтобы установить их самостоятельно:https://quality.embarcadero.com/browse/RSP-13231