虚拟地址转译成物理地址 双机模式手动查找

来源:互联网 发布:转换成淘宝客链接 编辑:程序博客网 时间:2024/05/17 13:39

0- 打开虚拟机与Windbg双机调试环境


1- 虚拟机器关闭PAE(物理地址扩展)


2- 在虚拟机中点击开始-运行 notepad.exe 记事本


3- 在记事本中输入:StartSupper


4- 切换至Windbg,Ctrl+Break 中断虚拟机


5- 命令行输入 !process 0 0 notepad.exe 查看进程信息,如果显示错误,则需要设置符号路径
kd>  !process 0 0 notepad.exe 
PROCESS 85c0dd40  SessionId: 1  Cid: 0a98    Peb: 7ffda000  ParentCid: 0550
    DirBase: 3cf32000  ObjectTable: 9fa8aa98  HandleCount:  56.
    Image: notepad.exe


6- 命令行输入 .process  85c0dd40  切换进程
kd> .process  85c0dd40  
Implicit process is now 85c0dd40
WARNING: .cache forcedecodeuser is not enabled


7- 命令行输入s -u 0x0 L0x1000000 "StartSupper" 在内存地址范围内搜索 Togd666
kd>  s -u 0x0 L0x1000000 "StartSupper" 
0019dde0  0053 0074 0061 0072 0074 0053 0075 0070  S.t.a.r.t.S.u.p.
001a2f38  0053 0074 0061 0072 0074 0053 0075 0070  S.t.a.r.t.S.u.p.


8- 命令行输入 du 0019dde0 查看宽字符串
kd> du 0019dde0  
0019dde0  "StartSupper"


9- .formats 命令在当前线程和进程上下文下对一个表达式或符号进行求值,并以多种数字格式显示出来。
kd> .formats 0019dde0  
Evaluate expression:
  Hex:     0019dde0
  Decimal: 1695200
  Octal:   00006356740
  Binary:  00000000 00011001 11011101 11100000
  Chars:   ....
  Time:    Tue Jan 20 22:53:20 1970
  Float:   low 2.37548e-039 high 0
  Double:  8.3754e-318


10- 虚拟地址0019dde0 二进制的头10位是页目录索引,中10位页表索引,后12位是字节索引


11- 页目录基地+页目录索引*4个字节(因为是指针) 得到页表基址
kd> !dd 3cf32000  +0x00*4
#3cf32000 2ccf3867 255b2867 00000000 00000000
#3cf32010 17c53867 28894867 24fef867 0df89867


12- 页表基址 + 页表索引(19d)*4 = 页 
kd> !dd 2ccf3000+19d*4
#2ccf3674 0006b867 0e04d867 25128867 01fa9867
#2ccf3684 0202a867 2532b867 2526d867 2502c867
------------------------------
//13- 页 + 字节索引 = 得到字符串的物理地理
kd> !du  0006b000 + de0
#   6bde0 "StartSupper"
------------------------------


总结:
1- 学习本章主要目的,理解分页机制
2- 如果第一步没有关闭PAE,得到的物理地址可能是一堆问号(?????)
3- 重点:这算法就像一本书,目录->页->字 (第14章->第362页-第100个字)
0 0
原创粉丝点击