首页 > 代码库 > 虚拟地址转物理地址
虚拟地址转物理地址
参考资料:
《X64结构体系内存寻址》
《x86 系列 CPU 内存寻址模式总结》
最好的两篇,对各个位都讲的很清楚, 刚开始容易陷入其中,整整看了两天,最后才发现主要框架, 查细节很有用。
win7 x64位,4级索引,看了两天,最后发现虚拟地址实现就是 4个数组坐标, 到物理地址就索引了4次数组, 或者是 [ [ [ [ [dirBae] ] + 0x8] + 0x8f*8] + 0xd90]
测试程序代码如下:
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
char szName[20] = "HelloWorld";
printf("szName:%x\n",szName);
getchar();
}
!process 0 0
上面显示 "hello world" 的虚拟地址, .formats 如下:
64位地址,高16位为符号位,底48位用于地址, 根据下图分割如下:
16位符号位 9 9 9 9 12位页内寻址
00000000 00000000 00000000 00000000 00000000 00101000 11111101 10010000
pml4e=0 pdpte=0 pde=1 pte=8f 页内偏移=d90
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
char szName[20] = "HelloWorld";
printf("szName:%x\n",szName);
getchar();
}
开始索引, 实际虚拟地址就是存了4个数组坐标,和一个偏移
来自为知笔记(Wiz)
虚拟地址转物理地址
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。