zoukankan      html  css  js  c++  java
  • 虚拟地址到物理地址的转换步骤【转】

    转自:http://www.cnblogs.com/RyanHuang/archive/2012/05/30/2525006.html

    已知一个虚拟地址0x01AF5518, 则转换的过程如下:

      注意: *这里讨论的以Windows下普通模式分页的情况, 也就是2级页表的情况*

    1.首先把虚拟地址拆分成3个部分(低12位, 中10位, 高10位), 换成2进制如下:
      -> 0000 0001 1010 1111 0101 0101 0001 1000

      按照10, 10, 12的位数重新排列后
      -> (页目录索引)00 000 00110, (页表项索引)10 1111 0101, (偏移)0101 0001 1000

      换算成十六进制后可以得到如下结果
      页目录索引 = 6, 页表项索引 = 0x2f5 , 偏移 = 0x518

    2. 根据当前的CR3寄存器中的物理地址定位页目录表基址
      Cr3中存放的是物理地址, 这个物理地址指向进程的页目录表基址, 由此可以得到
      页目录表基址(PDE) = Cr3 = 0xAA0E5000

    3. 计算页表项的地址
      页表地址存放在页目录表(PDE)中的第6个项目中, 也就是
      [0xAA0E5000 + 4 * 6] = [0xAA0E5018] = 0x3D955867, 其中0x00000867为该页表属性值, PTE = 0x3D955000

    3. 计算页面物理地址
      我们要找的页面在这个页表中的第0x2f5项, 所以虚拟地址所在的页的物理地址为
      [0x3D955000 + 0x2f5 * 4] = [0x3D955BD4] =
      假设[0x3D955BD4] = 0x7095e847, 页面的物理地址 x0x7095e000, 0x00000847表示的是页面属性

    4. 计算最终的物理地址
      由虚拟地址分离的偏移可以计算出最终的物理地址为
      0x7095E000 + 0x00000518 = 0x7095E518.

  • 相关阅读:
    curl命令详解
    Linux 下 set env export declare浅浅 set和shopt命令详解--(shell定制) (转载)
    ps aux指令詳解
    smb设置参考手册 --详细参数
    Ajax
    JSON浅谈
    Date类型
    笔记本电脑不能上网的问题
    editplus 初步设置
    w10 系统升级
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/8144378.html
Copyright © 2011-2022 走看看