首页
社区
课程
招聘
[求助]win7 x64系统中虚拟地址转换物理地址时遇到问题
发表于: 2017-7-26 18:04 3874

[求助]win7 x64系统中虚拟地址转换物理地址时遇到问题

2017-7-26 18:04
3874

近期在分析windows内存镜像数据,其中有个环节是将虚拟地址转换为物理地址,在看过大神http://bbs.pediy.com/thread-203391.htm的帖子之后进行手动尝试地址转换的过程,在操作过程中发现跳转获取的数据和windbg中使用!vtop指令转换的结果不一样,先上windbg的转换结果:

其中0xfffff80004a4b0a0为虚拟地址,0x187000为DTB,通过vtop转换的地址为0x4a4b0a0。

接着进行手动转换的操作,首先获取内存的镜像文件,将虚拟地址0xfffff80004a4b0a0按照9-9-9-9-12的模式拆解为下面的结构

11111000 0    0000000 00    000100 101    00100 1011    0000 10100000

    1f0                     0                     25                   4b                      a0

PML4E索引       PDPTE索引        PDE索引          PTE索引            页内偏移

对应PML4E的地址为DTB+0x1f0*8=0x187f80,使用winhex查看内存镜像文件的数据

继续获取PDPTE的地址0x199000+0x0*8=0x199000

继续获取PDE的地址0x198000+0x25*8=0x198128

继续获取PTE的地址0x4A00000+0x4b*8=0x4A00258读取页的偏移地址,再加上页内的偏移0xa0即为虚拟地址对应的物理地址

这里获取的值和windbg中看到的值相去甚远,这是为什么???求大神搭救呀~~~

PS:在转换的过程中还发现有时候PDE或者PTE为0x0000000000000000或者为0xFFFFFFFFFFFFFFFF,这又是神马情况呢?在x64下开启了PAE模式之后虚拟地址转物理地址的方式有变化么,是这个原因导致的么????


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 615
活跃值: (590)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
操作系统的有几个模块是4M分页的,你可以核实下。
2017-7-26 18:58
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
别的我不清楚,DirectoryTableBase作为物理地址之前要先右移12位我是知道的
2017-7-26 21:53
0
雪    币: 53
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个页大小是检查了的
2017-7-27 21:40
0
雪    币: 21
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5

DTB写错了吧,上一级table entry的12~35位提供下一级table物理基地址的高24位,低12位补零,正确的DTB应该是这样03198f000,高位0可以省略,base 感觉也不太对。给你看看我的:

0x00000018ff34
0000 0000 0   000 0000 00   00 0000 000   1 1000 1111   1111 0011 0100
                  0                     0                     0              0x18f                    0xf34
        PML4E            PDPTE                PDE                PTE                    offset


PROCESS fffffa8001e8a870

    SessionId: 1  Cid: 0ad0    Peb: 7efdf000  ParentCid: 03d0

    DirBase: 3198f000  ObjectTable: fffff8a002ce4710  HandleCount:  12.

    Image: XXXXXX.exe


!dq 0`3198f000
!dq 0`35043000
!dq 0`2ec47000
!dq 0`23a8a000+0x18f*8
!db 0`46701000+0xf34

lkd> !vtop 03198f000 0x00000018ff34
Amd64VtoP: Virt 00000000`0018ff34, pagedir 3198f000
Amd64VtoP: PML4E 3198f000
Amd64VtoP: PDPE 35043000
Amd64VtoP: PDE 2ec47000
Amd64VtoP: PTE 23a8ac78
Amd64VtoP: Mapped phys 46701f34

最后于 2020-9-19 01:17 被Gateway__编辑 ,原因:
2020-9-19 01:14
0
游客
登录 | 注册 方可回帖
返回
//