【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 个各种颜色的模块 , 都是 " 寄存器 " ;

寄存器可以访问 " 高速缓存 " , 这里的高速缓存就是 一级 / 二级 / 三级 缓存 ;

高速缓存 与 内存相对应 , 缓存中缓存的数据就是内存中的数据 ;

CPU 读取内存中的数据 : 如果在高速缓存中有相应数据 , 就直接加载到寄存器中 , 如果 高速缓存 中没有数据 , 就将数据从内存中加载到 高速缓存 中 ;

CPU 读取硬盘中数据 : 首先将硬盘的文件 , 加载到内存中 , 然后从内存中加载到 CPU 高速缓存中 , 最后才能将高速缓存中的数据加载到寄存器中 ;

【Android 逆向】x86 CPU 架构体系 ( CPU 模型 | 内存模型 )_第1张图片

段寄存器 , 每个寄存器 16 16 16 位 , 2 2 2 字节 , 是 x86- 32 32 32 位架构 的遗留产物 , 在 64 64 64 位架构中 , 基本不会使用 ;

32 32 32 位的寄存器 , 通用寄存器 , 变址寄存器 , 指针寄存器 , 在 x86- 64 64 64 位架构中经常使用 ;

  • 通用寄存器是用于计算的 ;
  • 变址寄存器 和 指针寄存器 是用于访问内存的 , 如将内存中的数据加载到寄存器中 , 或者将寄存器中的数据写出到内存中 ;

标志寄存器 : 根据不同的标志 , 进行不同的操作 , 如跳转 ; ( 实现 if 和 else 类似操作 )

指令寄存器 : 表明下一条要执行的指令位置 ;





二、内存模型



CPU 和 内存之间是可以直接访问的 ;

CPU 访问 硬盘 , 显卡 , 显示器 等其它外部设备 , 是通过内存间接访问的 ;

【Android 逆向】x86 CPU 架构体系 ( CPU 模型 | 内存模型 )_第2张图片

内存访问硬盘 : 硬盘中的数据不是直接写入到内存中的 , 硬盘中维护了一个硬盘缓存 , 内存加载硬盘数据时 , 先查看硬盘缓存中是否有相应数据 ,

  • 如果有直接加载到内存中 ;
  • 如果没有 , 则先将硬盘数据加载到硬盘缓存中 , 然后再加载到内存中 ;

内存访问显卡 : 显卡 GPU 并不是直接与内存进行数据交互 , 在显卡中维护了一块 显存 , 显存中的数据可以直接与内存进行交互 , 显卡与显存进行数据交互 ;

你可能感兴趣的