硬件和软件实施 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)。