Аттрибуты страниц памяти для выполнения кода?

Тема в разделе "WASM.WIN32", создана пользователем krol, 26 авг 2011.

  1. krol

    krol New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2011
    Сообщения:
    19
    Интересует вопрос: отличается ли чем то
    PAGE_READWRITE от PAGE_EXECUTE_READWRITE ?

    Допустим я записал в область PAGE_READWRITE код и делаю JMP
    Испытывал - код выполняется в обоих случаях. Тестил на XP SP3, 7 (вирт и реал).
    Везде работает.

    Там какие-то флаги должны быть в заголовке PE установлены и процессор поддерживать такую возможность?
     
  2. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Если для процесса DEP не активен, то PAGE_READ эквивалентно PAGE_EXECUTE.
     
  3. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Уточнение: если аппаратный DEP неактивен.
    Кроме того, некоторые системные процедуры (скажем, обработка исключений) передадут управление на страницу только при условии, что она имеет соответсвующий атрибут.
     
  4. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Да, конечно должна быть аппаратная поддержка атрибута PAGE_EXECUTE. Однако, MS говорит, о наличии софтверной реализации DEP в windows XP SP2 (http://support.microsoft.com/kb/875352), правда эта реализация не полноценная и "работает только для системных бинарников"... тут я не очень понял, что имеется в виду. Также DEPом можно управлять для конкретного процесса (SetProcessDEPPolicy API). Что произойдёт если выделить память READWRITE, потом отключить DEP через API и после этого попытаться эту память выполнить зависит от деталей реализации. С одной стороны если есть аппаратная поддержка, то вызов API не должен никак повлиять на работу атрибутов страниц... если только эта API не изменяет сама атрибуты.
     
  5. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Да, ещё в OPTIONAL_FILE_HEADER в поле Dll characteristics флаг 0x100 указывает на совместимость с DEP. Поддерживается этот флаг начиная с Vista
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    100gold
    Не полноценная потому, что без хардварной поддержки ось не может контролировать атрибуты для обычного исполняемого кода и делает это только при обработке исключений - прежде чем передать управление на SEH-обработчик делается проверка его принадлежности executable-памяти (см.,например, "древнюю" тему)
     
  7. krol

    krol New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2011
    Сообщения:
    19
    Т.е. чтобы пустить такой код без EXECUTE (без SEH)
    нужно либо проверить, поддерживает ли камень DEP, либо заюзать АПИ SetProcessDEPPolicy?