实践使用WinDBG从虚拟地址转换到物理地址
来源:互联网 发布:微处理器和单片机 编辑:程序博客网 时间:2024/06/05 16:09
正在逐章学习《调试软件》一书,看到2.7分页机制。仿照书上的例子,试着手工把虚拟地址转换到物理地址。
由于书中的例子是针对未开启PAE的情况,而我的XP SP2默认开启了PAE,所以白白浪费了大半天时间。话说以前还真不知道启动参数里面/noexecute=optin也会开启PAE。
后来在网上找到了作者针对开启PAE后如何转换的文章,重新实验了一下。原文地址:http://advdbg.org/blogs/advdbg_system/articles/627.aspx
1、启动计算器,输入数字“234234”。
2、启动WinDbg,附加到计算器进程。
3、输入命令x calc!gp*,得到如下信息
01014db0 calc!gpszNum = <no type information>
4、输入命令dd 1014db0 l1,查看地址1014db0的内容,得到如下信息
01014db0 000b4130
5、输入命令du b4130,查看地址b4130的字符串信息,得到
000b4130 "234234."
显然计算器把输入的数字的字符信息保存在这个地址里。
6、现在把这个地址000b4130分解一下,看清楚各个部分
位30,31 页目录指针表索引(PDPE)0x0
位21-29 页目录索引 (PDE)0x0
位12-20 页表索引(PTE)0 1011 0100 = 0xb4
位0-11 页内偏移 0001 0011 0000 = 0x130
7、再启动一个WinDbg,进入本地内核调试。
8、输入命令!process 0 0 列出所有进程,找到计算器对应的进程信息。
PROCESS 88269020 SessionId: 0 Cid: 0158 Peb: 7ffde000 ParentCid: 01e0
DirBase: 0ef40120 ObjectTable: e2c3f7f0 HandleCount: 49.
Image: calc.exe
9、DirBase就是该进程的页目录指针表的基地址,由于PDPE为0,所以地址ef40120中就是页目录的基地址信息。
输入命令!dd ef40120 l2,查看其中的内容,得到信息
# ef40120 33e45001 00000000
取12-35位,低12位为0(按4KB对齐),得到 0x33e45000。
10、同样由于PDE为0,所以地址33e45000就是页表的基地址信息。
输入命令!dd 33e45000 l2,得到信息
#33e45000 340a4067 00000000
还是取12-35位,低12位为0(按4KB对齐),得到页表基地址0x34a4000。
11、将页表基地址加上页表索引,得到页信息
输入命令!dd 34a4000+b4*8 l2,得到信息
#340a45a0 339df067 80000000
这个就是页地址了。
12、将页地址加上页内偏移,得到最终物理地址
输入命令!du 339df000+130
#339df130 "234234."
这与上面的内容完全一致。
另外WinDbg还提供了指令!vtop,能够直接将虚拟地址转换为物理地址。
lkd> !vtop ef40120 b4130
X86VtoP: Virt 000b4130, pagedir ef40120
X86VtoP: PAE PDPE ef40120 - 0000000033e45001
X86VtoP: PAE PDE 33e45000 - 00000000340a4067
X86VtoP: PAE PTE 340a45a0 - 80000000339df067
X86VtoP: PAE Mapped phys 339df130
Virtual address b4130 translates to physical address 339df130.
- 实践使用WinDBG从虚拟地址转换到物理地址
- windbg:虚拟地址转换为物理地址
- 地址翻译:从虚拟地址到物理地址
- 用windbg实现虚拟地址到物理地址转换(Converting Virtual Addresses to Physical Addresses)
- windbg调xp的calc(手工虚拟地址到物理地址转换练习)
- Linux 从虚拟地址到物理地址
- Linux 从虚拟地址到物理地址
- Linux 从虚拟地址到物理地址
- Linux 从虚拟地址到物理地址
- Linux 从虚拟地址到物理地址
- Linux 从虚拟地址到物理地址
- Linux 从虚拟地址到物理地址
- MIPS虚拟地址到物理地址转换过程
- #SC2440虚拟地址到物理地址的转换
- 虚拟地址到物理地址的转换
- 虚拟地址到物理地址的转换
- 通过windbg查看虚拟地址到物理地址的映射过程
- 虚拟地址到物理地址
- 1000以内的完数
- 函数专题:sum、row_number、count、rank\dense_rank over
- vmware linux mount U盘
- 从shp数据存入Oracle到geoserver发布地图数据
- cocos2d-x游戏开发(十二)场景切换:滑门效果
- 实践使用WinDBG从虚拟地址转换到物理地址
- Chrome 较简单修改 缓存路径 的方法
- ByteArrayOutputStream和ByteArrayInputStream详解
- 搭建struts2 + spring + hibernate(二):XML、代码篇
- ByteArrayOutputStream和ByteArrayInputStream详解
- How to Run Standard OA Framework Pages from JDeveloper
- EhCache实例
- ubuntu: apt-get update的时候遇到“Hash Sum mismatch”错误
- linux进程调度浅析