Сегментация памяти в Windows 2000/XP

Тема в разделе "WASM.WIN32", создана пользователем pananton, 22 окт 2007.

  1. pananton

    pananton New Member

    Публикаций:
    0
    Регистрация:
    22 окт 2007
    Сообщения:
    2
    Есть у кого информация о том, можно ли включить в винде странично-сегментую организацию памяти. То есть, как известно, процессоры Intel и AMD поддерживают на аппаратном уровне странично-сегментную организацию, но в винде (по крайней мере по умолчанию) сегментация выключена (это по-моему через регистр CR3 контролируется) и используется только страничный механизм. Так вот такой вопрос - можно ли как-то включить сегментацию? Я заинтересовался этим вопросом при изучении атак на переполнение буфера - ведь если работает сегментный механизм и винда нормально настраивает сегмент стека (то есть запрещает его исполнение), то проблема отпадает. Кто-нибудь может высказаться на эту тему?
     
  2. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    нельзя
     
  3. pananton

    pananton New Member

    Публикаций:
    0
    Регистрация:
    22 окт 2007
    Сообщения:
    2
    Cr4sh, ты мне всех отпугнул своим лаконичным ответом... :)
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    pananton
    Сегментация не может быть отключена, она включается вместе с защищенным режимом. Win использует flat модель памяти, соотвественно, все сегменты плоские (база 0, лимит 0xFFFFF * 0x1000). Чтобы избежать выполнения в стеке был введен NXE-бит, на уровне страниц. Но для этого нужна поддержка со стороны процессора. Правда, в Win есть некий программный DEP, но как он работает -- загадка :).

    Кстати, в качестве программного DEP'а можно было бы смотреть на значение eip потоков при переключении задач, и проверять, не принадлежит ли он к диапазону стека. Правда, как только шелл-код выполнит обращение к библиотечной ф-ии, eip уйдет в библиотеку, и никак ты его не вычислишь.