我们通过ce把记事本里面文本在内存当中的地址找到,这个地址是线性地址。
然后我们把这个十六位地址转换成二进制表示
在我们x86里面有两种方式:10-10-12/2-9-9-12 分页 (两种找法)
000AAC20是十六进制的,我们要先把它转成二进制的:
0000 0000 0000 1010 1010 ;正好20位,后面的C20没必要拆了因为它是属性
前面10位,后面10位:
0000 0000 00
00 1010 1010
C20 ;12位 属性
我们打开WinDbg输入下面的命令:
0: kd> !process 0 0 //查看CR3寄存器
Failed to get VadRoot
PROCESS 89df4788 SessionId: 0 Cid: 04b8 Peb: 7ffde000 ParentCid: 05f8
DirBase: 0aac0180 ObjectTable: e1e6dc28 HandleCount: 169.
Image: notepad.exe
DirBase:就是notepad.exe开头在哪里
(这个截图地址和ce不是同一个,还得靠你的想象力了,抱歉)
找到第一层,把后面的3位变成0。
第一层 + 线性地址中间10位4 :8addd000 + 00 1010 10104 = 。。。 每一层4K
(截图地址和ce找的不是同一个,抱歉)
找到第二层,还是把后3位全变成0
第二层 + 线性地址后12位 : xxxxxx + 0xC20 每一层4K
(地址和ce找的不是同一个,抱歉)
cpu就是按照这个公式来找的,这个跟操作系统没有关系。