【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 等 161616 個各種顏色的模塊 , 都是 " 寄存器 " ;
寄存器可以訪問 " 高速緩存 " , 這里的高速緩存就是 一級 / 二級 / 三級 緩存 ;
高速緩存 與 內存相對應 , 緩存中緩存的數據就是內存中的數據 ;
CPU 讀取內存中的數據 : 如果在高速緩存中有相應數據 , 就直接加載到寄存器中 , 如果 高速緩存 中沒有數據 , 就將數據從內存中加載到 高速緩存 中 ;
CPU 讀取硬盤中數據 : 首先將硬盤的文件 , 加載到內存中 , 然后從內存中加載到 CPU 高速緩存中 , 最后才能將高速緩存中的數據加載到寄存器中 ;
段寄存器 , 每個寄存器 161616 位 , 222 字節 , 是 x86-323232 位架構 的遺留產物 , 在 646464 位架構中 , 基本不會使用 ;
323232 位的寄存器 , 通用寄存器 , 變址寄存器 , 指針寄存器 , 在 x86-646464 位架構中經常使用 ;
- 通用寄存器是用于計算的 ;
- 變址寄存器 和 指針寄存器 是用于訪問內存的 , 如將內存中的數據加載到寄存器中 , 或者將寄存器中的數據寫出到內存中 ;
標志寄存器 : 根據不同的標志 , 進行不同的操作 , 如跳轉 ; ( 實現 if 和 else 類似操作 )
指令寄存器 : 表明下一條要執行的指令位置 ;
二、內存模型
CPU 和 內存之間是可以直接訪問的 ;
CPU 訪問 硬盤 , 顯卡 , 顯示器 等其它外部設備 , 是通過內存間接訪問的 ;
內存訪問硬盤 : 硬盤中的數據不是直接寫入到內存中的 , 硬盤中維護了一個硬盤緩存 , 內存加載硬盤數據時 , 先查看硬盤緩存中是否有相應數據 ,
- 如果有直接加載到內存中 ;
- 如果沒有 , 則先將硬盤數據加載到硬盤緩存中 , 然后再加載到內存中 ;
內存訪問顯卡 : 顯卡 GPU 并不是直接與內存進行數據交互 , 在顯卡中維護了一塊 顯存 , 顯存中的數據可以直接與內存進行交互 , 顯卡與顯存進行數據交互 ;
總結
以上是生活随笔為你收集整理的【Android 逆向】x86 CPU 架构体系 ( CPU 模型 | 内存模型 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】frida 框架
- 下一篇: 【Android 逆向】x86 CPU