(19)修改PDE PTE 的RW位使物理页可读写
生活随笔
收集整理的這篇文章主要介紹了
(19)修改PDE PTE 的RW位使物理页可读写
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、PDE PTE 結構
低12位是權限位。低2位是RW位,RW=0表示只讀,RW=1表示可讀可寫。
二、修改常量區數據
C語言中,修改常量區的字符串是不允許的,原因是物理頁不具有寫權限。
// PDE_PTE_P_RW.cpp : Defines the entry point for the console application. //#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]) {char *str = "Hello World";int addr = (int)str;printf("線性地址:0x%08x, 4*0x%x 4*0x%x 0x%x\n", addr, addr>>22,(addr>>12)&0x000002FF,addr&0x00000FFF);getchar(); // 修改 PDE PTE 的 RW 位為1,使物理頁可讀可寫str[4] = ' ';printf("修改后:%s\n", str);return 0; }我在代碼里已經按10-10-12模式拆好了線性地址,現在只要在windbg中找到PDE和PTE,將低2位改成1即可。
查CR3
!process 0 0
CR3=148af000
查PDE
!dd 148af000+4
PDE=19aef067
查PTE
!dd 19aef000+4*15
PTE=00c18025
查物理地址
!db 00c18000+818
確定沒找錯,然后觀察發現PTE的RW=0,改成1就好了:
!ed 19aef054 00c18027
執行剩下的代碼:
修改成功。
總結
以上是生活随笔為你收集整理的(19)修改PDE PTE 的RW位使物理页可读写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (18)修改 PTE 实现挂物理页读写空
- 下一篇: (20)PDE_PTE属性(U/S PS