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 欢迎有缘的朋友一起交流心得。
  • 相关阅读:
    QQ音乐 删除历史登录设备
    mweb发布文章为什么默认TinyMCE编辑器?
    Mac 安装 Homebrew
    uniapp配置scss支持
    PHPRedis教程之geo
    CentOS7通过YUM安装NGINX稳定版本
    CentOS7通过YUM安装MySQL5.6
    更换composer镜像源为阿里云
    使用chattr禁止文件被删除
    centos 7 源码安装 mysql 5.6
  • 原文地址:https://www.cnblogs.com/myart/p/5914717.html
Copyright © 2011-2022 走看看