分页机制下虚拟地址到物理地址

**

用windbg验证分页机制下虚拟地址到物理地址

**
分页机制下虚拟地址到物理地址
1将calc.exe路径写入windbg中
打开file->symbol File Path,输入calc.exe所在文件夹位置,C:\WINDOWS\system32

2打开计算器,随便输入一个数字
分页机制下虚拟地址到物理地址

3打开windbg调试该进程。
file->attach to a process ,点击calc.exe,用windbg调试。

在命令行中输入 xcalc!g* ,windbg会列出calc.exe中所有以g开头的符号
分页机制下虚拟地址到物理地址
其中 calc!gpszNum 该指针中存放的就是用户输入的数据 而该指针的虚拟地址则在左边显示为 01014db0

在命令行中输入dd 01014db0 就能得到存放我们所输入的数字的虚拟地址为00017b0
分页机制下虚拟地址到物理地址
再输入命令 du 00017b0 就能得到该数字

分页机制下虚拟地址到物理地址
这是通过虚拟地址查找


通过物理地址查找该数字
1再次打开另外一个windbg,用来调试内核。
file->kernel Debug->local,在命令行中输入!proces 0 0 查看当前运行的所有程序,找到calc.exe。得物理地址中calc.exe基地址为 0xle8dd000
分页机制下虚拟地址到物理地址
2.而刚才存放该数据的虚拟地址为 0x00017b0 ,在windbg中输入 .formats 00017b0 ,可以将该数字转化为二进制。
分页机制下虚拟地址到物理地址
该32位数中,前10位表示页目录偏移(0H),中间10位为页表偏移(b1H),低12位为页内偏移(7b0H)。
3根据偏移地址分别计算就能得到地址,然后得到对应的数
页表中得到的32位二进制地址(其中高20bit为页表所指向的物理页的起始地址,低12bit为该物理页的属性,所以是偏移地址加上该物理页的起始地址,和后12位无关)
分页机制下虚拟地址到物理地址
(页表偏移每项是4字节,所以需要x4,)