iOS逆向(二)函數(shù)本質(zhì)

概念

一、寄存器

1.數(shù)據(jù)地址寄存器

通常用來做數(shù)據(jù)計算的臨時存儲、累加、計數(shù)、地址保存等功能。定義這些寄存器的作用主要用于在CPU指令保存操作數(shù),在CPU中當作常規(guī)變量來使用。

ARM64中

  • 64位:X0 - X30, XZR(零寄存器)
  • 32位:W0 - W30, WZR(零寄存器)是64位寄存器的低32位部分,并不是獨立存在的

2.浮點和向量寄存器

因為浮點數(shù)存儲以及運算的特殊性,CPU中專門提供浮點寄存器來處理浮點數(shù)

  • 浮點寄存器 64位:D0 - D31 32位:S0 - S31

現(xiàn)在CPU支持向量運算(在圖形處理相關(guān)領(lǐng)域用的非常多)為了支持向量計算,系統(tǒng)也提供了眾多向量寄存器

  • 向量寄存器 128位:V0 - V31

3.SP和FP寄存器

  • SP寄存器在任意時刻會保存棧頂?shù)刂?/li>
  • FP寄存器也稱X29寄存器,屬于通用寄存器,但某些時刻用來保存棧底地址
    注:ARM64中,對棧的操作是16字節(jié)對齊的

4.X30寄存器

  • 存放的是函數(shù)的返回地址,當ret指令執(zhí)行時刻,尋找X30保存的地址值

二、棧

棧是一種具有特殊訪問方式的存儲空間(后進先出,Last In Out First,LIFO)

三、指令

str(store register) -> 變種stp(可以操作兩個寄存器)
將數(shù)據(jù)從寄存器中讀出來,存到內(nèi)存中

ldr(load register) -> 變種ldp(可以操作兩個寄存器)
將數(shù)據(jù)從內(nèi)存中讀出來,存到寄存器中

bl
將下一條指令地址放入lr(X30)寄存器
跳轉(zhuǎn)到標號處執(zhí)行指令

ret
默認使用lr(X30)寄存器的值,通過底層指令提示CPU此處作為下條指令地址
ARM64的特色指令,它面向硬件做了優(yōu)化處理

四、函數(shù)的參數(shù)與返回值

ARM64下,函數(shù)的參數(shù)是存放在X0 - X7(W0 - W7)這8個寄存器中,如果超過8個參數(shù),則會入棧
函數(shù)的返回值放在X0寄存器中

五、函數(shù)的局部變量

函數(shù)局部變量放在棧里

六、實踐

  1. 新建demo,添加匯編文件,匯編代碼


    添加匯編文件.png
  • 編寫匯編代碼
.text
.global _A  // 全局函數(shù)

_A:
sub sp, sp, #0x20       // 將sp減#0x20(向低地址拉伸??臻g32個字節(jié))
stp x0, x1, [sp, #0x10] // stp:操作兩個寄存器,將x0,x1放入內(nèi)存  [sp, #0x10]:sp加上#0x10
ldp x1, x0, [sp, #0x10] // ldp:操作兩個寄存器,將sp內(nèi)容寫入寄存器,交換
add sp, sp, #0x20       // 棧平衡,如果不處理,造成內(nèi)存不夠用,函數(shù)調(diào)用完不要了
ret
  • main中調(diào)用A函數(shù),設(shè)置斷點


    調(diào)用函數(shù).png

2.運行查看寄存器

  • 查看寄存器


    選擇查看寄存器.png
  • sp初始地址


    sp初始地址.png
  • 進入函數(shù),單步走


    sp從高地址往下拉伸32個字節(jié).png
  • 初始x0, x1中的值


    初始x0, x1中的值.png
  • 單步走,x0, x1中的值進行了交換


    x0, x1實現(xiàn)交換.png
  • CMD + Shift + M 查看寄存器變化


    查看寄存器變化.png

lldb:
單步執(zhí)行:ni
寫寄存器:register write x0 0xffffffff
讀寄存器:register read x0

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容