gpt4 book ai didi

windows - VirtualProtect 如何改变内存保护标志

转载 作者:可可西里 更新时间:2023-11-01 10:24:22 27 4
gpt4 key购买 nike

VirtualProtect 的第三个参数可以使用如下标志:

PAGE_EXECUTE
PAGE_NOACCESS
PAGE_READWRITE
PAGE_READONLY

...

一开始我觉得VirtualProtect可以通过PTE的flag来实现。但是当我阅读PTE的结构时,我在PTE中找不到记录这个函数的第3个参数的标志。

PTE的结构如下:

抱歉,我无法发布图片(因为没有 10 个声誉!),您可以从 Google 找到它。

我想找Windows在哪里记录了一个虚拟内存页的保护标志,不是PTE吗?

看了一些资料,我发现当一个PTE无效时,PTE的字段的意思就变了!然后有5位保护标志。

最佳答案

可用的 ProtectionFlags 是英特尔处理器支持的超集。请记住,Windows 是为在各种处理器上运行而编写的,它曾经也支持 MIPS、Itanium、Alpha 和 PowerPC。今天只是注脚,AMD/Intel 以压倒性优势获胜,ARM 在移动设备上大受欢迎。

Intel 处理器对页面保护​​属性的支持非常有限。页表条目有:

  • bit 1 for (R/W), 1 允许写访问,0 只允许读访问
  • bit 2 for (U/S), user/supervisory, 与用户模式代码无关
  • 用于 (XD) 的位 63,eXecute 已禁用。 AMD 核心的后期添加,最初作为“增强型病毒防护”销售,被英特尔采用。您今天会发现的所有处理器都支持它。

所以内核像这样映射保护标志:

  • PAGE_NOACCESS:页面根本不会映射到 RAM
  • PAGE_READONLY:读/写 = 0,XD = 1
  • PAGE_READWRITE:读/写 = 1,XD = 1
  • PAGE_EXECUTE:读/写 = 0,XD = 0

关于windows - VirtualProtect 如何改变内存保护标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22010412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com