Почему частные данные исполняются - PullRequest
0 голосов
/ 04 февраля 2012

Я искал частные данные для разных приложений, используя vmmap для Windows. И я обнаружил, что многие приложения имеют личные данные, помеченные как исполняемые. Я также обнаружил, что динамически распределяемые страницы из невыгружаемого пула ядра также являются исполняемыми. Почему Windows позволяет выполнять код со страниц данных. Или есть некоторые конкретные случаи, когда это требуется.

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 февраля 2012

Любой динамически генерируемый код должен находиться на исполняемой странице.

Это довольно часто. Например, любое .Net-приложение, Java-приложение или веб-браузер будет иметь много JIT-кода; Код ATL использует динамически генерируемые батуты для оконных процедур; любое приложение, которое перенаправляет API (например, использует Detours), создает батуты для перенаправленных функций.

Я не знаю, что делает ядро, но, возможно, (например, ATL) оно использует батуты для критичного к производительности кода, чтобы избежать просмотра таблицы.

1 голос
/ 04 февраля 2012

Если ваш код уже запущен в режиме ядра, отключение выполнения на определенных страницах полезно до определенного момента. Ваш код режима ядра всегда может взломать ядро ​​или напрямую манипулировать таблицами страниц и делать практически все, что угодно.

Таким образом, отключение выполнения может помочь выявить некоторые ошибки, но не может помочь с безопасностью (вы уже в ней) или надежностью (сбои страниц в режиме ядра вызывают BSOD). Возможно, по этим причинам отключение выполнения не применяется повсеместно в ядре.

...