Windows XP SP2 中的数据执行保护功能的详细说明
2008-08-22 09:55:23 来源:WEB开发网当系统在禁用PAE的情况下运行时,32位设备的驱动程序根本不需要实际内存来支持它们的映射寄存器。这意味着,不需要进行双缓冲处理,因为32位地址空间中包含所有设备和驱动程序。根据在基于x86和基于x64的计算机上对32位设备驱动程序进行的测试,大多数经过客户端测试并支持DMA的驱动程序都需要无限制的映射寄存器
为限制兼容性问题,WindowsXPSP2对硬件抽象层(HAL)进行了更改以模拟32位HALDMA行为。修改后的HAL使系统在PAE模式下运行时可以具有无限制的映射寄存器。另外,内核内存管理器忽略任何大于4GB的物理地址
由于对HAL和内存管理器进行了这些更改,我们预计运行WindowsXPSP2且支持DEP的系统上的设备驱动程序兼容性问题将会降到最低
开发人员备注
需要可执行内存区域的应用程序在分配内存时,必须使用PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_WRITECOPY属性。另外,应用程序不能从默认进程堆或堆栈执行
大多数执行与DEP不兼容的操作的应用程序必须进行更新,以便与DEP保持兼容。如果某个应用程序从专用堆分配可执行内存,则必须确保该堆内存中设置了EXECUTE标志。该应用程序可以使用VirtualAlloc应用程序编程接口(API)分配具有适当保护设置的内存 如果应用程序不从专用堆分配可执行内存,则必须对其进行修改以使其从专用堆分配可执行内存。该应用程序必须使用VirtualAllocAPI创建此堆,并且至少为该内存指定EXECUTE标志。生成的任何代码必须放在该可执行堆中
在生成可执行代码后,我们建议您为该应用程序设置内存保护,以禁止通过VirtualProtectAPI对该堆进行写访问。该措施将为进程地址空间的那些可执行区域提供更多保护
更多精彩
赞助商链接