Предотвращение выполнения данных отслеживания (DEP)

StackOverflow https://stackoverflow.com/questions/139826

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top