你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 應用ARM匯編破解iOS法式基本常識分享

應用ARM匯編破解iOS法式基本常識分享

編輯:IOS開發綜合

1、Thumb指令與ARM指令

  Thumb指令為16位,是以存儲代碼的密度高,節儉存儲空間。然則功效不全,它只是ARM指令(32位)集的彌補,是ARM指令集下的一個子集。在低級階段我們不須要懂得這些常識,只需有個概念曉得有這麼個器械便可以。

2、ARM的存放器初步懂得

  R0-R3:        用於函數參數及前往值的傳遞,跨越4個參數,其它參數存在棧中,在ARM中棧是向下發展的,R0還可以作為前往值。
  R4-R6, R8,R10-R11: 沒有特別劃定,就是通俗的通用存放器
  R7:          棧幀指針,指向母函數與被挪用子函數在棧中的接壤。
  R9:          在IOS3.0被操作體系保存
  R12:         外部進程挪用存放器,靜態鏈接時會用到,不用深究
  R13:         SP(stack pointer),是棧頂指針
  R14:         LR(link register),寄存函數的前往地址。
  R15:         PC(program counter),指向以後指令地址。
  CPSR:        以後法式狀況存放器,在用戶狀況下寄存像condition標記中止禁用等標記的。
  別的還有VFP(向量浮點運算)相干的存放器,不在羅列。

3、經常使用匯編

  助記符  解釋
  ADC  帶進位的加法
  ADD  加法
  AND  邏輯與
  B    分支跳轉,很少零丁應用
  BL 分支跳轉,跳轉後前往地址存入r14
  BX 分支跳轉,並切換指令形式(Thumb/ARM)
  CMP 比擬值,成果存在法式狀況存放器,普通用於分支斷定
  BEQ 成果為0則跳轉
  BNE 成果不為0跳轉
  LDR 加存放器,從內存加載到存放器
  LDRB 裝載字節到存放器
  LDRH 裝載半字到存放器(一個字是32位)
  LSL 邏輯左移這是一個選項,不是指令
  LSR 邏輯右移這是一個選項,不是指令
  MOV 傳送值/存放器到一個存放器
  STR 存儲一個存放器,存放器值存到內存
  STRB 存儲一個字節
  STRH 存儲一個半字
  SUB 減法
  PUSH POP 客棧操作

4、函數挪用

  函數的參數、部分變量、前往地址都在棧上存著,這部門棧上的內存稱為棧幀。和R0~R15(紛歧定全體)、CPSR等一路組成了函數的運轉情況。每個函數體系都邑分派一個棧幀,履行完成後體系主動發出。每一個函數都認為R0~R15、CPSR等CPU相干存放器為本身一人享有,所以要做一些需要操作。

  舉個例子:假定A挪用B時,那末A要保留本身的運轉情況(保留現場),B履行完後,要恢復A的運轉情況(恢復現場);別的A還可以經由過程R0—R4來傳遞參數,參數跨越4個可以經由過程棧,B前往時可以經由過程R0傳遞前往值。個中重要觸及的就是棧的操作和存放器的操作。下圖為函數挪用前後棧的結構,右邊為挪用前,左邊為挪用後,當B前往時應回到右邊狀況(A挪用B之前的狀況,就像沒有挪用B一樣)。

  在上圖中,一個棧幀除曾經提到的參數區域(parameter area)、鏈接區域(linkage area)、部分變量存儲區(local storage area)外還有棧幀指針寄存區域(saved frame pointer)、存放器存儲區(saved registers area),棧幀存放器就不再說明,存放器存儲區:保留非易掉存放器(R4,R5,R6,R8,R10,R11),前面的匯編代碼例子會引見。

  開端挪用(現場掩護):

  1)LR入棧;

  2)R7入棧,包存要恢復的存放器入棧;

  3)R7 = SP地址;

  4)將callee會修正且在前往caller時須要恢復的存放器入棧;

  5)分派棧空間給子法式應用。

  下圖為匯編代碼(應用hopper disassemble反編譯的代碼),剖析以下:

  第一行:將LR, R7, R4-R6入棧;

  第二行:r7=sp-0xc(指向old R7),之所以減去0xc由於PUSH後,r4,r5,r6占去12個字節;

  第三行:保留要恢復的存放器;

  第四行:給以後函數開拓棧空間。

  函數前往(恢復現場):

  1)釋放棧空間;

  2)恢復所保留的存放器;

  3)恢復R7;

  4)將之前寄存的LR從棧上彈出到PC,如許函數就前往了。

  下圖為匯編代碼(應用hopper disassemble反編譯的代碼),剖析以下:

  第一行:釋放棧空間;

  第二行:恢復保留的存放器;

  第三行:恢復保留的存放器,恢復R7,將之前寄存的LR從棧上彈出到PC。

【應用ARM匯編破解iOS法式基本常識分享】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved