VirtualProtect的第3个参数可以使用以下标志:
PAGE_EXECUTE
PAGE_NOACCESS
PAGE_READWRITE
PAGE_READONLY
...
首先我认为VirtualProtect可以通过使用PTE的标志来实现它。但是当我读取PTE的结构时,我在PTE中找不到记录该函数第3个参数的标志。
PTE的结构如下:
抱歉,我无法发布图片(因为没有10个声誉!),您可以在Google上找到它。
我想找到Windows记录虚拟内存页面保护标志的位置,不是PTE吗?
在阅读了一些材料之后,我注意到当PTE无效时,PTE字段的含义已经改变了!然后有5位用于保护标志。
答案 0 :(得分:2)
可用的ProtectionFlags是英特尔处理器支持的超级集合。请记住,Windows是为了在各种处理器上运行而编写的,它曾经支持MIPS,Itanium,Alpha和PowerPC。今天仅仅是脚注,AMD /英特尔凭借ARM在移动设备上流行的滑坡而获胜。
英特尔处理器对页面保护属性的支持非常有限。页表条目具有:
所以内核映射保护标志,如下所示: