Отслеживание выполнения данных (DEP) - PullRequest
2 голосов
/ 26 сентября 2008

При запуске одного из наших программ тестер сталкивался с диалоговым окном предотвращения выполнения данных в Windows.

Мы пытаемся воспроизвести эту ситуацию на компьютере разработчика для целей отладки: безуспешно.

Кто-нибудь знает, как найти причину, по которой защита DEP может убить приложение? Для этого есть какие-либо инструменты?

Ответы [ 3 ]

4 голосов
/ 26 сентября 2008

Диалоговое окно DEP обычно отображается только при попытке выполнить код из региона, который вы не помечаете как исполняемый. Это может быть вызвано тем, что в используемой вами библиотеке, например, «громы». ATL оконное. Эта проблема исправлена ​​в ATL 8.0.

Ошибка очистки стека - например, переполнение буфера - также может вызывать эту проблему, устанавливая адрес возврата в местоположение, которое не является исполняемым. Это может вызвать не нарушение прав доступа, а странное поведение, если DEP отключен для процесса или недоступен на оборудовании.

Это также может произойти, если вы сгенерируете исключение C ++ или вызовете исключение SEH, и ваши обработчики структурированных исключений были перегружены переполнением буфера.

0 голосов
/ 26 марта 2010

DEP зависит от наличия аппаратного обеспечения. Недавно у нас была ситуация, когда наше приложение работало нормально на старых машинах, но не работало на новых. Оказалось, что, хотя DEP был включен как на старых серверах, так и на новых серверах, мы потерпели крах на новых, потому что обнаружение оборудования было лучше, более агрессивно или что-то в этом роде. Так что, если ваш QA может воспроизводить, но DEV не может, то попробуйте его с идентичным оборудованием ... Хотя кажется, что QA будет иметь более новый / лучший ПК, чем dev ... Я считаю, что это полностью! Вот мои заметки о нашем недавнем опыте с этим: Несовместимости между Indy 9 и Windows Server 2003?

0 голосов
/ 26 сентября 2008

Потенциально, я думаю, что всякий раз, когда вы пытаетесь записать в память, которая не выделена, это будет возможным результатом. Это может быть что-то вроде удаления объекта с последующим его использованием или записи строки в буфер, слишком малый для его хранения.

...