关于内存管理和地址转换的小小小小小总结

关键词:32bit分页,物理地址扩展分页,四级页表,ARM的地址转换,CR3寄存器,虚拟地址到物理地址的映射

因为在ipad上画图比较好操作,这篇笔记就直接上传手写版了。把线性地址到物理地址部分的转换理了一下,以后有补充会做更新。



Linux在v2.6.11后最终采用四级页表的方案

四级页表的作用主要就是地址映射,将逻辑地址映射到物理地址。




ARM MMU的地址转换过程实际上更加复杂,通过两级页表实现,转换方式有两大类共四种情况,具体的可以看这篇博客https://blog.csdn.net/sinat_41104353/article/details/82778822

关于地址转换的计算这里再添加一个实例

已知系统使用IA-32分页,现知道一个虚拟地址0x10036270,需要将该虚拟地址转换为物理地址。若已知CR3寄存器中的值为0x7401000,转化的过程如下:


1. 虚拟地址为0x10036270(00010000 00000011 01100010 01110000)

22-31bit为PDI值(00 0100 0000),12-21bit为PTI值(00 0011 0110 ),0-11bit为地址偏移(010 0111 0000)

2.页目录项PDE的地址=PDI×4+PDB(CR3)=0x40×4+0x740100=0x7401100

3.知道PDE物理地址后即可知道该物理地址中存储的值,比如假设该物理地址存储的值为0x28cf9067。PTE的值由PDE值的12-31bit及虚拟地址的12-21bit构成(0-11bit根据12bit填充为0),可得到PTE的物理地址=0x28cf9058

4.假设该物理地址中的值为0x182a7071,物理地址的值由PTE值的12-31bit及偏移地址构成。

最终得到物理地址=0x28cf9000+0x270=0x28cf9270。

以上为IA-32分页虚拟地址转物理地址的过程。



下面是一些补充

关于虚拟地址到物理地址的转换

由于在内存中存储的一般是虚拟地址,而在物理内存中地址定位的一定是物理地址,因此计算虚拟地址(线性地址)到物理地址的映射关系是内存分析的关键。

虚拟地址到物理地址的映射计算需要使用到一个基本规则:在同一个虚拟地址页面上的内容,也在同一个物理页面。

比如,在物理内存管理中,页的大小一般为4KB、2MB、4MB,都大于或等于0x1000(4KB)。根据上述的规则,虚拟地址0xffdff000-0xffdfffff就应该映射到同一个物理页面上。而计算系统的页目录基地址是计算内存映射的关键,如果在0xffdff000-0xffdfffff中找到指向系统页目录基地址的指针就会解决地址映射的问题。

在上部分的笔记中能看到,CR3寄存器是非常重要的一个寄存器,它记录的是页目录基地址(或页目录指针基地址、或PLM4基地址),如果能得到CR3寄存器的内容,那么就有可能得到现成的页目录基地址。

这里以《内存取证原理与实践》的例子,先大概描述一下利用CR3的虚拟地址找到其物理地址的方法

以64位win7操作系统为例,_KPRCB 的结构成员ProcessorState是一个_KPRROCESSOR_STATE结构,起始地址为0xfffff80045eff80+0x40,在0x0处是SpecialRegister成员,偏移0x010处就是CR3寄存器,它的虚拟地址为0xfffff80045eff80+0x40+0x10。

而根据上述提到的基本规则我们可以知道,它和0xfffff800045efe00在同一个页面中,那么所以它的物理地址=0xFFFFF800045EFE00的物理地址+0x180(这两个地址的差值)+0x40+0x10。

关于页的分页方式和页的大小则由以下过程确定:

1. 根据CR3寄存器的内容找到它指向的物理地址。

2. 判断该地址处的第一个字节,如果不是0x01则跳转至第三步,否则表明其使用了PAE模式,从这个地址开始的8byte是页目录指针。根据待转换的虚拟地址的第31~30 bit选择页目录指针。例如,如果待转换的地址是0x8054c2b8(10000000 01010100 11000010 10111000),则页目录指针表的第三项(二进制10)为指向页目录的指针,根据这个指针可找到页目录基地址。

根据页目录基地址和虚拟地址的第21~20bit确定待转换虚拟地址对应的页目录项。例如,如果待转换的地址是ox8054c2b8,则第21~29bit是000000010(0x02),则从页目录基地址加上8×2开始的8个字节就是所找的页目录项。

3. 判断该地址处的第一个字节最高位,如果是“1”,则表明使用的大页模式;如果是“0”,则表明它指向页表。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容