硬件和軟件實施 DEP 技術的目的並不是防止在計算機上安裝有害程序。 而是監視已安裝程序,幫助確定它們是否正在安全地使用系統內存。 為監視程序,硬件實施 DEP 將跟蹤已指定為“不可執行”的內存區域。 如果已將內存指定為“不可執行”,但是某個程序試圖通過內存執行代碼,Windows 將關閉該程序以防止惡意代碼。 無論代碼是不是惡意,都會執行此操作。
硬件和軟件 DEP 的默認配置可以保護核心 Windows 組件和服務並對應用程序兼容性產生最小的影響,但是我們可以選擇將 DEp 配置為保護計算機上的所有應用程序和程序。 如果我們將DEP 配置為保護計算機上的所有應用程序和程序,則可以獲得額外的保護,但是也可能會引起其它應用程序兼容性問題。 如果我們將 DEP 配置為保護計算機上的所有應用程序和程序,並且某些32 位應用程序存在兼容性問題,則可以從軟件 DEP 保護中豁免這些應用程序。
windows在ntoskrnl中、ntoskrnl.exe初始化時,根據之前用戶在Ntldr中選擇的啟動配置,來初始化DEP的設置。對DEP的設置,大致有:
(1)對各個進程的設置(寫到系統的全局共享內存區域)
設置分為可執行的EXECUTE(未保護的)和不可執行的NOEXECUTE(DEP保護的)。同時有“例外”和“包含”兩種設置。2*2=共4種設置。
(2)CPU中寄存器的設置。對於開啟了DEP的,需要設置CPU的相關標志位。
(3)對用戶態的程序,在0x10000004非法訪問的異常處理中,根據(1)中的設置,如果進程沒有開啟數據執行保護,則忽略異常。
(4)對內核態,開啟可執行保護後,可能觸發0x000000FC的錯誤。
第(2)步的設置,應該就是Intel 的DEP方案。而(1)應該是在Copy-On-Write的時候會用到的。(1)(2)的結果觸發(3)(4)。