windows平台下虚拟地址转换到物理地址

1 打开windbg. 用windbg打开notepad.exe, g

4c4517219ffffcff.jpg

2 随便输入几个字符。 例如 952795279527

c9cebd8b4d54e712.jpg

3 搜索记事本里面的字符串, 可知输入的字符在记事本的虚拟地址是 000a93f0

abe2ffd3cb36384e.jpg

4 再打开一个 windbg, 选择本地调试 clrl+k , 确定,输入 !process 0 0 notepad.exe
得到notepad的DirBase, 也就是CR3寄存器

24f176f13da681cd.jpg


lkd> !process 0 0 notepad.exe
PROCESS 88c6d020  SessionId: 0  Cid: 0b54    Peb: 7ffdf000  ParentCid: 1d58
    DirBase: 0b902b80  ObjectTable: eb072c08  HandleCount:  47.
    Image: notepad.exe

865e445460737951.jpg
189cb75813f04cbd.jpg
7a8ecfaf4356776c.jpg

dda6cf1cc42791be.jpg

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            12
00   000000 000  01010 1001   0011 11110000

对应的16进制
0    0           A9          3f0


lkd> !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 00000000

lkd> !dd 8dcf9000
#8dcf9000 81ed8867 00000000 56871867 00000000
#8dcf9010 89bce867 00000000 d37bf867 00000000
#8dcf9020 83d72867 00000000 339c5867 00000000
#8dcf9030 00000000 00000000 00000000 00000000

lkd> !dd 81ed8000+a9*8
#81ed8548 8e1ba867 80000000 c583e867 80000000
#81ed8558 7e643867 80000000 b9f84867 80000000
#81ed8568 89d05867 80000000 1c2c6867 80000000
#81ed8578 87987867 80000000 10688867 80000000

lkd> !dd 8e1ba000+3f0
#8e1ba3f0 00350039 00370032 00350039 00370032
#8e1ba400 00350039 00370032 00000000 00000000
#8e1ba410 00000000 00000000 00000000 00000000
#8e1ba420 00000000 00000000 00000000 00000000



lkd> !du 8e1ba3f0 
#8e1ba3f0 "952795279527"

得知地址内存8e1ba3f0 对应notepad虚拟内存000a93f0
注意显示物理内存的!dd, 并且取到的 目录项要去掉低 12的标志位
文章示例的是开启PAE,页面大小是4k的情况,其他的分页方式命令有所不同
具体看intel指令手册 3a的介绍

转载于:https://www.cnblogs.com/tieyan/p/4547773.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值