Android 逆向x86 CPU 架构体系 ( CPU 模型 | 内存模型 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向x86 CPU 架构体系 ( 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 高速缓存中 , 最后才能将高速缓存中的数据加载到寄存器中 ;
段寄存器 , 每个寄存器 16 16 16 位 , 2 2 2 字节 , 是 x86- 32 32 32 位架构 的遗留产物 , 在 64 64 64 位架构中 , 基本不会使用 ;
32 32 32 位的寄存器 , 通用寄存器 , 变址寄存器 , 指针寄存器 , 在 x86- 64 64 64 位架构中经常使用 ;
- 通用寄存器是用于计算的 ;
- 变址寄存器 和 指针寄存器 是用于访问内存的 , 如将内存中的数据加载到寄存器中 , 或者将寄存器中的数据写出到内存中 ;
标志寄存器 : 根据不同的标志 , 进行不同的操作 , 如跳转 ; ( 实现 if 和 else 类似操作 )
指令寄存器 : 表明下一条要执行的指令位置 ;
二、内存模型
CPU 和 内存之间是可以直接访问的 ;
CPU 访问 硬盘 , 显卡 , 显示器 等其它外部设备 , 是通过内存间接访问的 ;
内存访问硬盘 : 硬盘中的数据不是直接写入到内存中的 , 硬盘中维护了一个硬盘缓存 , 内存加载硬盘数据时 , 先查看硬盘缓存中是否有相应数据 ,
- 如果有直接加载到内存中 ;
- 如果没有 , 则先将硬盘数据加载到硬盘缓存中 , 然后再加载到内存中 ;
内存访问显卡 : 显卡 GPU 并不是直接与内存进行数据交互 , 在显卡中维护了一块 显存 , 显存中的数据可以直接与内存进行交互 , 显卡与显存进行数据交互 ;
以上是关于Android 逆向x86 CPU 架构体系 ( CPU 模型 | 内存模型 )的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向x86 CPU 架构体系 ( 堆内存 | 栈内存 | 函数调用 )
Android 逆向x86 CPU 架构体系 ( 堆内存 | 栈内存 | 函数调用 )
Android 逆向ARM CPU 架构体系 ( ARM 内存模型 | ARM 架构堆的实现 | ARM 架构栈的实现 )
Android 逆向ARM CPU 架构体系 ( ARM 内存模型 | ARM 架构堆的实现 | ARM 架构栈的实现 )