[课上练习]手工将虚拟地址转换为物理地址
来源:互联网 发布:股票训练软件 编辑:程序博客网 时间:2024/04/28 17:54
环境设置:
关闭PAE(物理地址扩展)
bcdedit /set PAE forcedisable
bcdedit /set nx AlwaysOff
开启双机调试,在虚拟机中新建一个记事本,并输入“cyxvc”,然后断下来
在WinDBGM中输入:
0: kd> !process 0 0 notepad.exe
PROCESS 8816f3d8 SessionId: 1 Cid: 0960 Peb: 7ffd4000 ParentCid: 0630
DirBase: 38200000 ObjectTable: 8bfbc410 HandleCount: 63.
Image: notepad.exe
0: kd> .process 8816f3d8
Implicit process is now 8816f3d8
WARNING: .cache forcedecodeuser is not enabled
0: kd> s -u 400000 l2000000 "cyxvc"
018a0b3c 0063 0079 0078 0076 0063 0000 0000 0000 c.y.x.v.c.......
0: kd> du 018a0b3c
018a0b3c "cyxvc"
分解018a0b3c
前十位(页目录索引): 6
中十位(页表索引): A0
后十二位(字节索引): B3C
0: kd> !dd 38200000
#38200000 3962e867 396af867 00000000 00000000
#38200010 36303867 36fcf867 39e3f867 390a5867
#38200020 3a0be867 38000867 36d0f867 00000000
#38200030 00000000 00000000 00000000 00000000
#38200040 00000000 00000000 00000000 00000000
#38200050 00000000 00000000 00000000 00000000
#38200060 00000000 00000000 00000000 00000000
#38200070 00000000 00000000 00000000 00000000
39e3f867 后三位是权限描述 取39e3f000
0: kd>!dd 39e3f000+A0*4
#39e3f280 38180867 00000080 00000080 00000080
#39e3f290 35dc2867 360c1867 00000080 00000080
#39e3f2a0 36604867 36908867 362c3867 367c9867
#39e3f2b0 36c0a867 3690b867 36e8c867 3690d867
#39e3f2c0 36b4e867 36f8f867 36c90867 36c11867
#39e3f2d0 36c52867 367c6867 369c7867 370d3867
#39e3f2e0 36805867 36d96867 36f97867 36e98867
#39e3f2f0 36dd9867 3705a867 371db867 374dc867
38180867 后三位是权限描述 取38180000
最终转换成的物理地址为:38180000+B3C=38180B3C
即 018a0b3c =》 38180B3C
1: kd> du 018a0b3c
018a0b3c "cyxvc"
1: kd> !du 38180B3C
#38180b3c "cyxvc"
相关知识:
其他资料:
已知一个虚拟地址0x01AF5518, 则转换的过程如下:
注意: *这里讨论的以Windows下普通模式分页的情况, 也就是2级页表的情况*
1.首先把虚拟地址拆分成3个部分(低12位, 中10位, 高10位), 换成2进制如下:
-> 0000 0001 1010 1111 0101 0101 0001 1000
按照10, 10, 12的位数重新排列后
-> (页目录索引)00 000 00110, (页表项索引)10 1111 0101, (偏移)0101 0001 1000
换算成十六进制后可以得到如下结果
页目录索引 = 6, 页表项索引 = 0x2f5 , 偏移 = 0x518
2. 根据当前的CR3寄存器中的物理地址定位页目录表基址
Cr3中存放的是物理地址, 这个物理地址指向进程的页目录表基址, 由此可以得到
页目录表基址(PDE) = Cr3 = 0xAA0E5000
3. 计算页表项的地址
页表地址存放在页目录表(PDE)中的第6个项目中, 也就是
[0xAA0E5000 + 4 * 6] = [0xAA0E5018] = 0x3D955867, 其中0x00000867为该页表属性值, PTE = 0x3D955000
3. 计算页面物理地址
我们要找的页面在这个页表中的第0x2f5项, 所以虚拟地址所在的页的物理地址为
[0x3D955000 + 0x2f5 * 4] = [0x3D955BD4] =
假设[0x3D955BD4] = 0x7095e847, 页面的物理地址 x0x7095e000, 0x00000847表示的是页面属性
4. 计算最终的物理地址
由虚拟地址分离的偏移可以计算出最终的物理地址为
0x7095E000 + 0x00000518 = 0x7095E518.
- [课上练习]手工将虚拟地址转换为物理地址
- 初试将虚拟地址转换为物理地址
- 虚拟地址转换为物理地址
- windbg调xp的calc(手工虚拟地址到物理地址转换练习)
- 将虚拟地址转换成物理地址
- windbg:虚拟地址转换为物理地址
- 储存管理 与 虚拟地址如何转换为物理地址
- ARM Linux虚拟地址转换为内存物理地址
- 虚拟地址转换成物理地址
- Linux 虚拟地址 物理地址 转换
- 逻辑地址转换为物理地址
- 物理地址转换成虚拟地址MmMapIoSpace
- Linux 内核 虚拟地址 物理地址 转换
- MIPS虚拟地址到物理地址转换过程
- 转载:虚拟地址转换成为物理地址
- #SC2440虚拟地址到物理地址的转换
- Linux 内核 虚拟地址 物理地址 转换
- 虚拟地址到物理地址的转换
- Android应用开发中的风格和主题(style,themes)
- 欢迎使用CSDN-markdown编辑器
- html+jquery1.9+cube解决方案+移动自适应基础结构模板
- ambari-server启动时的警告解决方法,WARNING: setpgid(5947, 0) failed - [Errno 13] Permission denied
- ViewPage第一课
- [课上练习]手工将虚拟地址转换为物理地址
- android按键事件和触屏事件(2)-带你从源码的角度彻底理解
- システム構築の標準プロセス体系:SDEM
- java泛型学习简记
- ORA-28000: the account is locked
- 人与人之间,交的是心
- lambda 表达式
- Android KITKAT 以上实现沉浸式状态栏
- U-BOOT start.S分析