在 Windows 上修改页面 table 条目
Modify page table entry on Windows
对于堆栈地址,我有以下来自 Windgb 的 PDE/PTE 信息:
kd> !pte 6EFFC
VA 0006effc
PDE at C0600000 PTE at C0000370
contains 0000000065D39867 contains 0000000000000020
pfn 65d39 ---DA--UWEV not valid
DemandZero
Protect: 1 - Readonly
即使 PTE 无效,WinDBG 如何找到只读状态,如何更改?必须通过 VAD 完成吗?
如果未设置 PTE 的“valid
”位(在您的示例中就是这种情况),则 PTE 由操作系统处理,而不是由 MMU 处理。
在这种情况下,您的 PTE 是软件 PTE(_MMPTE_SOFTWARE
结构;!= _MMPTE_HARDWARE
[您可以 'dt
' windbg 上的两个结构],这可能导致4 种软件 PTE,取决于位域中设置的位。
如果第 12 位到第 31 位均为零,则这是 "Demand Zero" PTE(因此,未通过 VAD 解析)。位 5 到 9 表示页面保护(0x20 = 第 5 位设置 = 只读)。
保护位没有正式记录,但您可以在网上的某些页面上找到它们的值。摘自 this reactos page:
#define MM_ZERO_ACCESS 0 // this value is not used.
#define MM_READONLY 1
#define MM_EXECUTE 2
#define MM_EXECUTE_READ 3
#define MM_READWRITE 4 // bit 2 is set if this is writable.
#define MM_WRITECOPY 5
#define MM_EXECUTE_READWRITE 6
#define MM_EXECUTE_WRITECOPY 7
#define MM_NOCACHE 8
#define MM_DECOMMIT 0x10
#define MM_NOACCESS MM_DECOMMIT|MM_NOCACHE
(注意:请记住,您必须将上述常量左移 5,因为保护位从第 5 位开始)
请参阅此博客post“Windows Virtual Address Translation and the Pagefile”(尤其是讨论软件 PTE 的部分)以获得关于各种 PTE 的非常好的解释。
对于堆栈地址,我有以下来自 Windgb 的 PDE/PTE 信息:
kd> !pte 6EFFC
VA 0006effc
PDE at C0600000 PTE at C0000370
contains 0000000065D39867 contains 0000000000000020
pfn 65d39 ---DA--UWEV not valid
DemandZero
Protect: 1 - Readonly
即使 PTE 无效,WinDBG 如何找到只读状态,如何更改?必须通过 VAD 完成吗?
如果未设置 PTE 的“valid
”位(在您的示例中就是这种情况),则 PTE 由操作系统处理,而不是由 MMU 处理。
在这种情况下,您的 PTE 是软件 PTE(_MMPTE_SOFTWARE
结构;!= _MMPTE_HARDWARE
[您可以 'dt
' windbg 上的两个结构],这可能导致4 种软件 PTE,取决于位域中设置的位。
如果第 12 位到第 31 位均为零,则这是 "Demand Zero" PTE(因此,未通过 VAD 解析)。位 5 到 9 表示页面保护(0x20 = 第 5 位设置 = 只读)。
保护位没有正式记录,但您可以在网上的某些页面上找到它们的值。摘自 this reactos page:
#define MM_ZERO_ACCESS 0 // this value is not used.
#define MM_READONLY 1
#define MM_EXECUTE 2
#define MM_EXECUTE_READ 3
#define MM_READWRITE 4 // bit 2 is set if this is writable.
#define MM_WRITECOPY 5
#define MM_EXECUTE_READWRITE 6
#define MM_EXECUTE_WRITECOPY 7
#define MM_NOCACHE 8
#define MM_DECOMMIT 0x10
#define MM_NOACCESS MM_DECOMMIT|MM_NOCACHE
(注意:请记住,您必须将上述常量左移 5,因为保护位从第 5 位开始)
请参阅此博客post“Windows Virtual Address Translation and the Pagefile”(尤其是讨论软件 PTE 的部分)以获得关于各种 PTE 的非常好的解释。