Есть у кого информация о том, можно ли включить в винде странично-сегментую организацию памяти. То есть, как известно, процессоры Intel и AMD поддерживают на аппаратном уровне странично-сегментную организацию, но в винде (по крайней мере по умолчанию) сегментация выключена (это по-моему через регистр CR3 контролируется) и используется только страничный механизм. Так вот такой вопрос - можно ли как-то включить сегментацию? Я заинтересовался этим вопросом при изучении атак на переполнение буфера - ведь если работает сегментный механизм и винда нормально настраивает сегмент стека (то есть запрещает его исполнение), то проблема отпадает. Кто-нибудь может высказаться на эту тему?
pananton Сегментация не может быть отключена, она включается вместе с защищенным режимом. Win использует flat модель памяти, соотвественно, все сегменты плоские (база 0, лимит 0xFFFFF * 0x1000). Чтобы избежать выполнения в стеке был введен NXE-бит, на уровне страниц. Но для этого нужна поддержка со стороны процессора. Правда, в Win есть некий программный DEP, но как он работает -- загадка . Кстати, в качестве программного DEP'а можно было бы смотреть на значение eip потоков при переключении задач, и проверять, не принадлежит ли он к диапазону стека. Правда, как только шелл-код выполнит обращение к библиотечной ф-ии, eip уйдет в библиотеку, и никак ты его не вычислишь.