关于DEP、ASLR的兼容性问题分析
DEP带来的兼容性问题
一、硬件方面
不具有DEP技术支持的CPU将无法从硬件层面对内存页进行保护从而应用DEP,在此情况下,软件支持的DEP并不能直接阻止在数据页上执行代码。
二、内核方面
32位系统只能通过引导至PAE模式来支持DEP,并不能通过PTE的高双字的最高bit即bit63来实现(PTE的第63位控制着页的可执行属性)。
即这个位置为0,表示此页不可执行;没有置为0,表示此页可以执行。
而32位系统的页目录和页表项只有32个bit,所以不可能提供DEP的这个保护位,因此DEP只有在64bit的PTE上才能实现。
而只有cr4的bit5即PAE启用的时候,PTE才为64bit。
三、功能方面
用于将内存位置标记为不可执行的DEP,会导致32位软件出现兼容性问题。
这是因为DEP阻止了某些程序的运行,可能会导致这些应用程序被挂起而产生无法运行的错误。
ASLR带来的兼容性问题
一、内核方面
在Windows的32位系统与64位系统中,其地址随机化的位数与方式均是不同的。
在32位系统中,Windows只尝试随机化32位地址中的8位,这些是位从16到23,只影响地址的页目录条目和页表条目部分。
原因是操作