Android|【Android 逆向】x86 CPU 架构体系 ( CPU 模型 | 内存模型 )
文章目录
- 一、x86 CPU 模型
- 二、内存模型
一、x86 CPU 模型
下图是 x86 架构的 CPU 模型图 :
左侧的 EAX , EBX , ECX , EDX , ESI , EDI , EBP , ESP , CS , DS , ES , FS , GS , SS , EFLAGS , EIP 等16 16 16 个各种颜色的模块 , 都是 " 寄存器 " ;
【Android|【Android 逆向】x86 CPU 架构体系 ( CPU 模型 | 内存模型 )】寄存器可以访问 " 高速缓存 " , 这里的高速缓存就是 一级 / 二级 / 三级 缓存 ;
高速缓存 与 内存相对应 , 缓存中缓存的数据就是内存中的数据 ;
CPU 读取内存中的数据 : 如果在高速缓存中有相应数据 , 就直接加载到寄存器中 , 如果 高速缓存 中没有数据 , 就将数据从内存中加载到 高速缓存 中 ;
CPU 读取硬盘中数据 : 首先将硬盘的文件 , 加载到内存中 , 然后从内存中加载到 CPU 高速缓存中 , 最后才能将高速缓存中的数据加载到寄存器中 ;
文章图片
段寄存器 , 每个寄存器16 16 16 位 ,2 2 2 字节 , 是 x86- 32 32 32 位架构 的遗留产物 , 在64 64 64 位架构中 , 基本不会使用 ;
32 32 32 位的寄存器 , 通用寄存器 , 变址寄存器 , 指针寄存器 , 在 x86- 64 64 64 位架构中经常使用 ;
- 通用寄存器是用于计算的 ;
- 变址寄存器 和 指针寄存器 是用于访问内存的 , 如将内存中的数据加载到寄存器中 , 或者将寄存器中的数据写出到内存中 ;
指令寄存器 : 表明下一条要执行的指令位置 ;
二、内存模型
CPU 和 内存之间是可以直接访问的 ;
CPU 访问 硬盘 , 显卡 , 显示器 等其它外部设备 , 是通过内存间接访问的 ;
文章图片
内存访问硬盘 : 硬盘中的数据不是直接写入到内存中的 , 硬盘中维护了一个硬盘缓存 , 内存加载硬盘数据时 , 先查看硬盘缓存中是否有相应数据 ,
- 如果有直接加载到内存中 ;
- 如果没有 , 则先将硬盘数据加载到硬盘缓存中 , 然后再加载到内存中 ;
推荐阅读
- 宽容谁
- 我要做大厨
- android第三方框架(五)ButterKnife
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘