【Android 逆向】ARM CPU 架构体系 ( ARM 内存模型 | ARM 架构堆的实现 | ARM 架构栈的实现 )
文章目錄
- 一、ARM 內(nèi)存模型
- 二、ARM 架構(gòu)堆的實現(xiàn)
- 三、ARM 架構(gòu)棧的實現(xiàn)
一、ARM 內(nèi)存模型
ARM 架構(gòu)體系中 , CPU 直接訪問內(nèi)存 , 控制內(nèi)存中的狀態(tài)和數(shù)據(jù) , 內(nèi)存中映射外部設(shè)備 , 外設(shè)通過內(nèi)存中的狀態(tài)數(shù)據(jù)改變外設(shè)內(nèi)部的情況 ;
如 : CPU 讀取硬盤數(shù)據(jù) , 首先訪問內(nèi)存中的對應(yīng)內(nèi)存塊 A , 內(nèi)存塊向硬盤控制器發(fā)送命令 , 硬盤控制器將數(shù)據(jù)取出放到另外一塊內(nèi)存 B 中 , 通過內(nèi)存狀態(tài)轉(zhuǎn)換 , 告知內(nèi)存已經(jīng)讀取完畢 , CPU 可以直接訪問內(nèi)存中內(nèi)存塊 B 中的數(shù)據(jù) ;
所有的外設(shè)基本都有一塊屬于自己的內(nèi)存 , 有的時在內(nèi)存中映射的 , 有的自帶內(nèi)存 , 如顯卡顯存 ;
二、ARM 架構(gòu)堆的實現(xiàn)
應(yīng)用程序 向 系統(tǒng) 請求內(nèi)存 , 系統(tǒng)通過系統(tǒng)調(diào)用 , 分配內(nèi)存 , 內(nèi)存分配完畢后 , 返回內(nèi)存的首地址給應(yīng)用程序 ;
申請完內(nèi)存后 , 需要 free 釋放內(nèi)存 , 否則會造成泄漏 ;
三、ARM 架構(gòu)棧的實現(xiàn)
如果參數(shù)小于等于 333 個 , 則只需要使用 R0 , R1, R2 這 333 個寄存器存放參數(shù) , 這 333 個寄存器變相的稱為了棧 ;
如果參數(shù)大于等于 444 個 , 則 R3 寄存器記錄棧地址 ( 棧的起始位置 ) , 如下圖所示 ;
在 ARM 中 , 棧指針只會 push 到寄存器中 , 但是不使用 ; 使用到棧中的參數(shù)時 , 會使用變量寄存器將棧地址保存起來 , 使用變量寄存器中的地址 ;
總結(jié)
以上是生活随笔為你收集整理的【Android 逆向】ARM CPU 架构体系 ( ARM 内存模型 | ARM 架构堆的实现 | ARM 架构栈的实现 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】ARM CPU
- 下一篇: 【Android 逆向】x86 汇编 (