首页 > 其他分享 >分页机制及映射过程

分页机制及映射过程

时间:2023-03-24 11:58:28浏览次数:41  
标签:0x8 分页 映射 kd 00000000 16 6c 机制 12

分页机制和映射过程
x86 : CR3-PDT-PTT-offset 10-10-12
x86 with PAE : CR3-PDPT-PDT-PTT-offset 2-9-9-12
EPT(x64) : EPTP-PML4E-PDPTE-PDE-PTE-offset 9-9-9-9-12

x86
image

x86 with PAE
CR4 寄存器的第 5 位为 1 说明开启了 PAE
intel 把 CPU 的管脚数从 32 增加到 36 来提高 CPU 寻址能力,这样可以索引到的页面由 2^20 变为 2^24,线性地址依然是 32 位,但物理地址是 36 位
同样一个物理页是 4 KB,PTE 能够索引的地址空间为 2^20 * 2^12 = 4GB,PAE 能够索引的地址空间为 2^24 * 2^12 = 64GB
eg:

点击查看代码
0x01012475 <-> 00  000001000  000010010  010001110101 <-> 0x0  0x8  0x12  0x475
cr3 = 0x017f02c0
解:
kd> !dd 017f02c0 + 0x0*0x8
# 17f02c0  06d13801 00000000 01d74801 00000000
kd> !dd 06d13801 + 0x8*0x8
# 6d13040  04250867 00000000 00000000 00000000
kd> !dd 04250867 + 0x12*0x8
# 4250867  056b7005 00000000 04d53005 00000000
kd> !db 056b7005
# 56b7005  48 65 6c 6c 6f 57 6f 72-6c 64     HelloWorld

image

EPT
一张表项所有项代表空间大小 256TB-512GB-1GB-2MB-4KB,一张表中的一项代表空间大小 512GB-1GB-2MB-4KB-1Byte
0x87654321 的二进制为 10000111011001010100001100100001
9-9-9-9-12 <-> 000000000 000000010 000111011 001010100 001100100001 <-> 0x0 0x2 0x3B 0x54 0x321
*EPTP 有多少个地址(8Byte=16个16进制数)就代表有多少项,即 a * 512GB,eg一个
*PDPTE 有多少个地址(8Byte=16个16进制数)就代表有多少项,即 b * 1GB,eg八个
*PDE 有多少个地址(8Byte=16个16进制数)就代表有多少项,即 c * ,eg八个
image
这里自己构建的 EPT 没有任何功能,0x87654321 转换后还是 0x87654321,可以自己构建
0x87654321 <-> 000000000 000000010 000111011 001010100 001100100001 <-> 0x0 0x2 0x3B 0x54 0x321
image

image
image

x64
PML4T(Page Map Level4 Table)及表内的PML4E结构,每个表为4K,内含512个PML4E结构,每个8字节
PDPT (Page Directory Pointer Table)及表内的PDPTE结构,每个表4K,内含512个PDPTE结构,每个8字节
PDT (Page Directory Table) 及表内的PDE结构,每个表4K,内含512个PDE结构,每个8字节
PT(Page Table)及表内额PTE结构,每个表4K,内含512个PTE结构,每个8字节。

点击查看代码
0x2ffde8  <->  000000000  000000000  000000001  011111111  110111101000  <-> 0  0  1  0xff  0xde8
cr3 = 0x7d838000
kd> !dq 7d838000
# 7d838000  02b00000~7d274867 00000000~00000000
kd> !dq 7d274000
# 7d274000  03000000~7d737867 01900000~7d23f867
kd> !dq 7d737000 + 0x8
# 7d737008  01500000~7d7bb867 11700000~7b596867
kd> !dq 7d7bb000 + 0xff*8
# 7d7bb7f8  89a00000~7d084867 97300000~7afbc867
kd> !dq 7d084000 + 0xde8
# 7d084de8 48 65 6c 6c 6f 57 6f 72-6c 64     HelloWorld

标签:0x8,分页,映射,kd,00000000,16,6c,机制,12
From: https://www.cnblogs.com/hanpto/p/17251030.html

相关文章

  • 数据量很大的情况下,对于分页查询你有什么优化方案吗?
    当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化......
  • ddr控制-axi4映射到altera-uniPHY
    原始资料参考《emi_ddr_ug》,暂未下载到,故未粘贴datasheet原图。local_size:burst读写的最大数据数量。通常IP核内部有FIFO用于支持这样的连续数据读写,在Megafunction......
  • 菜品分页查询
    返回的一张表字段不全,得返回dto/***菜品信息分页查询*@parampage*@parampageSize*@paramname*@return*/@GetMapping......
  • 会话管理机制、SQL注入攻击
    会话管理机制会话管理概述绝大多数Web应用程序中,回话管理机制是一个基本的安全组件回话管理在应用程序执行登录功能时显得特别重要因为,它可以在用户通过请求提交他们的......
  • 用lambda表达式写一个数组映射
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intmain(){ //定义一个整数数组arr,包含五个元素:1,2,3,4,5。 intarr[]={......
  • Mybatis分页插件的原理
    首先分页参数放到ThreadLocal中,拦截执行的sql,根据数据库类型添加对应的分页语句重写sql,例如select*fromtablewherea转换为(根据数据库类型添加对应语句):selectcoun......
  • windows命令行下用netsh实现端口转发(端口映射)
    微软Windows的netsh是一个命令行脚本实用工具。使用netsh工具,可以查看或更改本地计算机或远程计算机的网络配置。不仅可以在本地计算机上运行这些命令,而且可以在网络上的远......
  • vector的扩容机制实现
    在做C++primer的课后题时,有一道为自己写的类定义拷贝控制操作,之后定义一个vector进行push_back并观察vector的capacity。通过查资料了解到vector当达到扩容要求时,会将所......
  • Python中的重试机制
    ====引用自https://www.jb51.net/article/254886.htm(一文详解Python中的重试机制)这里要给大家介绍的是一个第三方库-Tenacity(标题中的重试机制并并不准确,它不是Python......
  • Android中使用Room(ORM关系映射框架)对sqllite数据库进行增删改查
    场景RoomRoom是Google官方提供的数据库ORM框架,使用起来非常方便。Room在SQLite上提供了一个抽象层,以便在利用SQLite的全部功能的同时能更加流畅的访问数据库。Room中三个主......