zoukankan      html  css  js  c++  java
  • 虚拟地址转物理地址

    参考资料:
    《X64结构体系内存寻址》
    《x86 系列 CPU 内存寻址模式总结》
    最好的两篇,对各个位都讲的很清楚, 刚开始容易陷入其中,整整看了两天,最后才发现主要框架, 查细节很有用。
    win7 x64位,4级索引,看了两天,最后发现虚拟地址实现就是 4个数组坐标, 到物理地址就索引了4次数组, 或者是   [ [  [   [  [dirBae] ] + 0x8] + 0x8f*8] + 0xd90]
     测试程序代码如下:
    1. #include "stdafx.h"
    2. #include <Windows.h>
    3. int _tmain(int argc, _TCHAR* argv[])
    4. {
    5. char szName[20] = "HelloWorld";
    6. printf("szName:%x ",szName);
    7. getchar();
    8. }



     
    !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
    开始索引, 实际虚拟地址就是存了4个数组坐标,和一个偏移

     
     
     






    汇编c保护内核pe学习群: 587594855 股票价值投资套利研究群 468714081 欢迎有缘的朋友一起交流心得。
  • 相关阅读:
    如何快速转载CSDN及博客园中的博客
    Ubuntu18.04连不网 报"有线连接未托管"
    Ubuntu18.04的网络配置
    vim基本操作
    Git更新远程仓库代码到本地(转)
    POJ 3253 Fence Repair
    POJ 2503 Babelfish
    POJ 2002 Squares
    POJ 1840 Eqs
    POJ 3274 Gold Balanced Lineup
  • 原文地址:https://www.cnblogs.com/myart/p/5914717.html
Copyright © 2011-2022 走看看