Почему FogBugz требует, чтобы DEP был выключен?

Мне действительно интересно, почему FogBugz при локальной установке настаивает на том, что DEP выключен?

5 ответов

FogBugz 6 (и более ранние версии) требует, чтобы Data Execution Prevention (DEP) была отключена в версиях Windows с DEP из-за стороннего COM-компонента, который мы используем для анализа электронной почты. Мы исправим это в следующей основной версии FogBugz: FogBugz больше не будет использовать этот сторонний компонент (фактически, следующая версия FogBugz не будет использовать какие-либо COM-компоненты).

Включите его и посмотрите, где он падает с помощью отладчика:) Я столкнулся с некоторыми COM-компонентами, которые выполняли бы некоторый код из блока данных, который вызывал исключения DEP. Я хотел бы предположить, что FogBugz также получает доступ к некоторым нативным компонентам, которые делают то же самое.

Мне просто не нравится идея отключить DEP в серверной среде, потому что современное программное обеспечение не может справиться с этим. Тем более, что это единственное программное обеспечение, которое я пробовал за те годы, которые требовали его.

Это во время установки, что я столкнулся с предупреждением DEP.

Как сказано выше в ссылке FogBugz, "имейте в виду, что FogBugz не будет работать должным образом с включенным DEP".

Не зная специфики FogBugz, но...

Самая распространенная причина отключения DEP - неправильно связанные сегменты кода, которые выглядят как сегменты данных.

Вторая наиболее распространенная причина - машинный код в строках. В общем, это действительно плохой стиль, но иногда в Windows это не помогает.

Третья наиболее распространенная причина - некоторый алгоритм в коде, предполагающий макет стека. DEP портит это.

Или, возможно, программа действительно выполняет код в буфере кучи.

Код, который пытается залатать или вставить хук в другие модули в своем адресном пространстве, часто не будет работать, если DEP не отключен или не установлены соответствующие параметры защиты памяти для установленного хука.

Это распространенная техника для некоторых сред (например, Delphi), где "исправления" применяются динамически или во время выполнения для исправления ошибок, которые поставщик еще не устранял.

Другие вопросы по тегам