-
-
[求助]win7 x64系统中虚拟地址转换物理地址时遇到问题
-
发表于:
2017-7-26 18:04
3874
-
[求助]win7 x64系统中虚拟地址转换物理地址时遇到问题
近期在分析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模式之后虚拟地址转物理地址的方式有变化么,是这个原因导致的么????
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!