参考文档:
Windows虚拟地址转物理地址(原理+源码实现,附简单小工具)
首先查看CR4寄存器第5位为1说明开启了PAE
转换规则如下:
规则:
每个项的长度为8
VA为
2位:(30—31)页目录指针表的索引
9位:(21—29)页目录表索引
9位:(12—20)页表索引
12位:(0—11)页内偏移
例如:开启PAE的情况下将计算器进程的入口点0xEC1000转化为物理地址
16进制 | 2进制 | 说明 |
0X0 | 00 | (30—31)页目录指针表的索引 |
0X7 | 000000111 | (21—29)页目录表索引 |
0XC1 | 011000001 | (12—20)页表索引 |
0X0 | 000000000000 | (0—11)页内偏移 |
1、windbg输入:!process 0 0 查看calc进程信息
记录下两个个关键信息:
DirBase : be62e300 查表需要
PROCESS :87eb1530 附加进程需要
2:windbg输入:.process 87eb1530 附加到指定进程
3、定位页目录指针表的索引
我们的页目录指针表的索引是:0
得到的是:9f789801,因为后3位是属性位,所以直接抹掉变成:9f789000
4、定位页目录表索引
!dd 9f789000+0x8*7
得到的是:9f65d867,因为后3位是属性位,所以直接抹掉变成:9f65d000
5、定位页表索引
!dd 9f65d000+0x8*0XC1
得到的是:96927025,因为后3位是属性位,所以直接抹掉变成:96927000
6、定位页内偏移
!dd 96927000+0x0
7、得到最终物理地址