Для сертификации приложений в Windows Store существуют определённые требования, в том числе и к настройке флагов компиляции. Одним из таких требований является использование флага /SafeSEH для обеспечения безопасного обращения с исключениями, а также флагов /NXCOMPAT и /DYNAMICBASE для предотвращения выполнения данных и применения технологии рандомизации адресного пространства соответственно.
Проблема
Разработчики, использующие C++ Builder XE, сталкиваются с трудностями при включении данных флагов. В частности, для флагов /NXCOMPAT и /DYNAMICBASE можно использовать утилиты editbin.exe из Visual Studio или peflags.exe из Cygwin, но это не является оптимальным решением, так как отсутствует возможность настройки этих флагов непосредственно в C++ Builder.
Самая большая проблема возникает с флагом /SafeSEH, который предназначен для обеспечения безопасности обработчиков исключений в 32-битных приложениях. Этот флаг требует генерации дополнительных таблиц, указывающих на функции, которые могут быть валидными обработчиками исключений. Это сложная задача, которая может потребовать глубокого анализа ассемблерного кода и описания адресов обработчиков исключений.
Решение
Для решения проблемы с флагом /SafeSEH необходимо убедить разработчиков C++ Builder обновить компилятор, чтобы он поддерживал данный флаг. Это важно, так как /SafeSEH является частью платформы Windows с XP SP2 и помогает закрыть известную уязвимость безопасности.
Альтернативные шаги
Разработчикам рекомендуется обратиться к официальному источнику поддержки C++ Builder и создать запросы на добавление поддержки флагов /NXCOMPAT и /DYNAMICBASE в линкер C++ Builder, а также на то, чтобы runtime файлы (DLLs/BPLs) распространялись уже с этими флагами, установленными. Это позволит избежать необходимости использования внешних утилит для настройки флагов.
Примеры кода
К сожалению, в C++ Builder XE нет встроенной поддержки для добавления флагов /SafeSEH, /NXCOMPAT и /DYNAMICBASE в настройки компиляции напрямую. Однако, для флагов /NXCOMPAT и /DYNAMICBASE можно использовать следующую команду через командную строку после сборки проекта:
Для флага /SafeSEH вручную настроить таблицы безопасных обработчиков исключений без специальных инструментов и глубокого понимания ассемблерного кода крайне сложно, и это выходит за рамки обычной разработки на C++ Builder.
Заключение
Для сертификации приложений в Windows Store важно убедиться, что используются все необходимые флаги компиляции. Если C++ Builder XE не поддерживает нужные флаги, разработчикам следует обратиться к разработчикам C++ Builder с соответствующими запросами и предложениями.
Обновление
Разработчикам следует также учитывать, что с выпуском новых версий C++ Builder, таких как C++ Builder XE8, XE9 и последующих, поддержка таких флагов может быть улучшена или реализована. Рекомендуется следить за обновлениями и обновлять свои инструменты разработки, чтобы соответствовать текущим требованиям сертификации.
Установка флагов компиляции для сертификации приложений под Windows 8 в C++ Builder XE и связанные с этим проблемы и решения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS