一、概念铺垫
mov eax,dword ptr ds:[0x12345678]
上面这条mov指令中,0x12345678 是有效地址,ds.base+0x12345678是线性地址。
每个进程都拥有“4GB”地址空间,这4GB实际上并不存在,数据真正存储在“物理地址”中。
在10-10-12分页模式下,一个线性地址分为3部分:
二、设置系统分页模式为10-10-12模式
将boot.ini文件中的启动参数,noexecute改成execute。如图:
三、实验:通过线性地址找物理地址
开一个记事本,输入一些文字,用CE找到其线性地址:
线性地址 000AAC60 拆分为3部分。分别占10、10、12位:
0000 0000 0000 1010 1010 1100 0110 0000
0000 0000 00
00 1010 1010
1100 0110 0000
这三个值都是下标,具体使用方式如下。
首先,挂起windows,查看notepad.exe的CR3(DirBase),CR3存储的是物理地址。
输入命令 !process 0 0
这个 0296f000 就是第一张表,第一个下标是0000 0000 00,注意第一和第二张表存的是地址,大小是4字节,所以要乘4,此处是0,所以还是0,使用!dd
查看物理内存:
如上图,第二张表的地址就是 00fe4067
将第三位的属性位改成0,也就是00fe4000
。第二个下标00 1010 1010
即0xAA
,乘以4后就是2A8,还是使用!dd
查看物理内存:
这里改为 !db
查看,结果如图: