windows平台下虚拟地址转换到物理地址
2015-06-02 21:57
387 查看
1 打开windbg. 用windbg打开notepad.exe, g
2 随便输入几个字符。 例如 952795279527
3 搜索记事本里面的字符串, 可知输入的字符在记事本的虚拟地址是 000a93f0
4 再打开一个 windbg, 选择本地调试 clrl+k , 确定,输入 !process 0 0 notepad.exe
得到notepad的DirBase, 也就是CR3寄存器
cr4的第5位标示是否开启PAE, 可以用livekd查看cr4寄存器
我的电脑开启了pae。 根据上图intel指令手册32位地址分为 2 9 9 12
得知地址内存8e1ba3f0 对应notepad虚拟内存000a93f0
注意显示物理内存的!dd, 并且取到的 目录项要去掉低 12的标志位
文章示例的是开启PAE,页面大小是4k的情况,其他的分页方式命令有所不同
具体看intel指令手册 3a的介绍
2 随便输入几个字符。 例如 952795279527
3 搜索记事本里面的字符串, 可知输入的字符在记事本的虚拟地址是 000a93f0
4 再打开一个 windbg, 选择本地调试 clrl+k , 确定,输入 !process 0 0 notepad.exe
得到notepad的DirBase, 也就是CR3寄存器
lkd> !process 0 0 notepad.exePROCESS 88c6d020 SessionId: 0 Cid: 0b54 Peb: 7ffdf000 ParentCid: 1d58 DirBase: 0b902b80 ObjectTable: eb072c08 HandleCount: 47. Image: notepad.exe
cr4的第5位标示是否开启PAE, 可以用livekd查看cr4寄存器
lkd> .formats 000a93f0 Evaluate expression: Hex: 000a93f0 Decimal: 693232 Octal: 00002511760 Binary: 00000000 00001010 10010011 11110000 Chars: .... Time: Fri Jan 09 08:33:52 1970 Float: low 9.71425e-040 high 0 Double: 3.42502e-318
我的电脑开启了pae。 根据上图intel指令手册32位地址分为 2 9 9 12
2 9 9 1200 000000 000 01010 1001 0011 11110000对应的16进制0 0 A9 3f0lkd> !dd 0b902b80 # b902b80 8dcf9801 00000000 ddaba801 00000000# b902b90 7727b801 00000000 9dcb8801 00000000# b902ba0 b32ae801 00000000 adfaf801 00000000# b902bb0 97fb0801 00000000 3dbed801 00000000# b902bc0 7a9e2801 00000000 3e963801 00000000# b902bd0 67324801 00000000 1b321801 00000000# b902be0 d5df8801 00000000 7ee79801 00000000# b902bf0 63d3a801 00000000 ab077801 00000000lkd> !dd 8dcf9000#8dcf9000 81ed8867 00000000 56871867 00000000#8dcf9010 89bce867 00000000 d37bf867 00000000#8dcf9020 83d72867 00000000 339c5867 00000000#8dcf9030 00000000 00000000 00000000 00000000lkd> !dd 81ed8000+a9*8#81ed8548 8e1ba867 80000000 c583e867 80000000#81ed8558 7e643867 80000000 b9f84867 80000000#81ed8568 89d05867 80000000 1c2c6867 80000000#81ed8578 87987867 80000000 10688867 80000000lkd> !dd 8e1ba000+3f0#8e1ba3f0 00350039 00370032 00350039 00370032#8e1ba400 00350039 00370032 00000000 00000000#8e1ba410 00000000 00000000 00000000 00000000#8e1ba420 00000000 00000000 00000000 00000000lkd> !du 8e1ba3f0 #8e1ba3f0 "952795279527"
得知地址内存8e1ba3f0 对应notepad虚拟内存000a93f0
注意显示物理内存的!dd, 并且取到的 目录项要去掉低 12的标志位
文章示例的是开启PAE,页面大小是4k的情况,其他的分页方式命令有所不同
具体看intel指令手册 3a的介绍
相关文章推荐
- 基本遗传算法(SGA)的MATLAB实现
- Hadoop入门介绍
- JAVA堆算法,基于数组实现
- 《Hadoop基础教程》之初识Hadoop
- 详解C++右值引用
- linux网络编程学习之一网络字节序
- 唉!走着走着就迷路了
- 微软100题(61)找出数组中两个只出现一次的数字
- 用Visual Studio将Objective-C编译为C++
- 2015第23周二
- 大学里迷茫了,就看看这些吧。
- git和svn的区别
- HttpClient基础
- Image Processing using C#
- 【android】初步学习日期选择器的使用
- HTML5 定稿:手机 App 三年内将彻底消失?
- 微软100题(60)在O(1)时间内删除链表结点
- having
- Linux Shell脚本攻略(1.12)
- tomcat启动报错:java.net.BindException: Permission denied <null>:80