Проблемы совместимости
Исполняемый стек необходим очень многим приложениям: защитным механизмам, эмуляторам, just-in-time компиляторам и т.д. Попытки сделать стек неисполняемым неоднократно предпринимались еще в 70-80 годах, когда никакого Windows'а и в проекте не существовало, но… они как-то не прижились. А все из-за проблем совместимости. Кому нужна операционная система, если на ней нельзя запускать свои любимые приложения? Выхода нет. Или безопасность, или совместимость. Компромисс невозможен. Разве только что… рассказывают (врут кончено), что давным-давно стали греки строить баню. И озадачились они вопросом: стоит ли строгать доски или нет? Ведь если не построгать, можно легко занозиться, а если построгать… попробуй тут не поскользнуться мыльной пяткой. Поразмыслив и курнув хорошей травы, они поступили так: построгали и прибили обстроганным на низ. Аналогичным путем пошла и Microsoft: разработала некоторую пародию на защиту и тут же ее отключила, чтобы у пользователей не возникло лишних проблем.
Тем не менее, проблемы все-таки возникли. Наберите "DEP" в "Базе Знаний", чтобы посмотреть какие конфликты обнаруживаются только с продуктами самой Microsoft, которая по всем понятиям, должна была обеспечить надлежащую преемственность и совместимость. Вот, например:
q Hardware (DEP)-enabled computer may unexpectedly quit after you resume from standby or from hibernation in Windows XP Service Pack 2 (при активном аппаратном DEP компьютер может неожиданно зависать при выходе из спящего или hibernation-режима): http://support.microsoft.com/default.aspx?scid=kb;en-us;889673;
q You receive a "Data Execution Prevention" error message when you start Live Meeting 2005 (при запуске Live Meeting 2005 появляется сообщение об ошибке типа "Data Execution Prevention") http://support.microsoft.com/default.aspx?scid=kb;en-us;894643;
q You receive error messages when you install Windows CE 4.x Emulator on a computer that is running Windows XP Service Pack 2 and the computer has DEP hardware (при установке эмулятора Windows CE 4.x, возникает сообщение об ошибке): http://support.microsoft.com/default.aspx?scid=kb;en-us;891667;
Со сторонними производителями дело и вовсе труба. Навесные упаковщики и протекторы, использующие самомодифицирующийся код и другие антихакерские трюки, не могут работать с неисполняемым стеком, а это значит, что защита DEP для них должна быть отключена. Кое-кто может возразить, что все проблемы от "неправильного" стиля программирования и использования "недокументированных" особенностей системы (которые на самом деле очень даже документированные), однако, проблемы встречаются не только у кустарей, но и весьма именитых фирм, например, Borland. Заходим в "Базу Знаний", набираем "DEP" и тут же получаем множество ссылок, типа:
q http://qc.borland.com/wc/qcmain.aspx?d=21249
q http://qc.borland.com/wc/qcmain.aspx?d=10827
q http://support.borland.com/entry.jspa?externalID=1522&categoryID=108
Таким образом, DEP очень конфликтная вещь, создающая множество проблем и ни от чего не защищающая. Microsoft допустила множество серьезных просчетов, позволяющих проникать сквозь DEP даже на максимальном уровне защищенности.
Все дальнейшие рассуждения применимы как к 32- так и к 64-битным редакциям NT, и не зависят от настойки системы. Будем для определенности считать, что ключ /noexecute установлен в положение AlwaysOn.