娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月23日(星期一)

正在發生

2019年12月23日 | iOS程序破解——ARM匯編基礎

發布者:Meiren520 來源: eefocus關鍵字:iOS  程序破解  ARM  匯編基礎 手機看文章 掃描二維碼
隨時隨地手機看文章

一、Thumb指令與ARM指令

Thumb指令為16位,因此存儲代碼的密度高,節省存儲空間。但是功能不全,它只是ARM指令(32位)集的補充,是ARM指令集下的一個子集。在初級階段我們不需要了解這些知識,只要有個概念知道有這么個東西就可以。


二、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(向量浮點運算)相關的寄存器,不在列舉。


三、常用匯編

  助記符  說明 
  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 堆棧操作


四、函數調用

  函數的參數、局部變量、返回地址都在棧上存著,這部分棧上的內存稱為棧幀。和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),棧幀指針上面已介紹(R7);寄存器存儲區:保存非易失寄存器(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。

關鍵字:iOS  程序破解  ARM  匯編基礎 引用地址:iOS程序破解——ARM匯編基礎

上一篇:Ubuntu安裝ARM架構GCC工具鏈最簡單辦法
下一篇:ARM Cortex M3指令集

推薦閱讀

據外媒報道,AEye宣布該公司的遠程威脅探查及安全技術取得了重大突破。VSI Labs對其設備的性能規格測試進行了監控及驗證,證實AEye iDAR系統可探查及追蹤1000米外的卡車,其測距是當前常規激光雷達設備的4-5倍。AEye的測試為固態激光雷達設定了新的業內標桿(基準),該款設備的掃描速率為100Hz,刷新了業內紀錄。該測試在加州拜倫(Byron)的機場跑道上...
這表明,沒有設置該stm8單片機型號的宏可以在下面選擇一種 復制到如下圖所示的地方(粗體)STM8L15X_MD   中等密度設備     STM8L15X_MDP  中等密度+的設備  STM8L15X_HD    高密度設備。然后就可以編譯了
要想做超聲波測距系統的仿真,核心是怎么解決這個問題:實物系統實際存在的超聲波并利用它測距如何在仿真圖中實現。我也下載過很多別人的仿真圖,可是自己一運行就是沒顯示,全部都不能用,其實問題就是出在仿真圖中超聲波發射接收模塊。經過修改的仿真圖如下(親測可用)這個仿真圖還包含按鍵設置模塊和報警模塊(前者用于設置報警值,后者在測得距離小于...
12月22日,上海智位機器人股份有限旗下品牌DFRobot 線上發布面向青少年教學的開源平臺----行空板, 解決目前Python教學難和使用門檻高的問題,旨在推動Python 教學在青少年中的普及,使廣大師生“2步, 擁抱Python” ----實現天馬行空的創意。 在現階段教學過程中,老師們常用主控板,其運行croPython, 而不是完整Python。MicroPython只能實現...

史海拾趣

問答坊 | AI 解惑

Orcad10.5中文教程

Orcad10.5中文教程.rar(1506.18K)…

查看全部問答∨

mega8定時新問

void timer1_ovf_isr(void) { //TIMER1 has overflowed TCNT1H = 0x85; //reload counter high value TCNT1L = 0xEE; //reload counter low value count++; if(count==60) {PORTB |= BIT(4); count=0; } }        ...…

查看全部問答∨

1小時c語言入門[4]

(八)//以上的文字寫于2005年5月,由于時間關系,一直未能將此完成,最近閑著無聊又接著寫了些文字,以下寫于2006年6月5日!     在這里我想對上面一點,作個簡單的說明,如果你是剛學單片機,那么你寫的代碼是VERY GOOD的,但是如果把上面 ...…

查看全部問答∨

手機充電原理圖

手機充電原理圖…

查看全部問答∨

串口通訊問題,十分奇怪,剛剛忘了加分了

用UTU2440開發板接收電腦串口發送數據,正常 用用電腦接收工作板發送過來的數據,正常 但是用UTU2440接收工作板發送過來的數據不正常,并且與波特率有一定的關系 正常數據為$L-0360,+000,00000,R-0633,+000,00000# 在波特率為4800是用UTU24 ...…

查看全部問答∨

wince驅動工程師面試題 無分 有興趣來做做

1、求i,j,k,ret    int i=-2;    int j=1;    int k=2;   int ret=++i&&++j||++k; 2、 請指出變量a,b,c在內存中存儲位置(數據段,棧,代碼段)及a,b,c的值 int a; void fun() {   ...…

查看全部問答∨

數據庫和嵌入式

我們學校就要分方向了。。。有數據庫和嵌入式。。。 請各位大蝦指點下。。這兩個方向的應用方面和現今社會需求那方面的人才要些。。。。 清大蝦們給我點小小的建議。。。謝謝!!!!!!!…

查看全部問答∨

關于生成Win CE 6.0 SDK的問題

請教各位高手,我在PB for CE 6.0生成SDK后.SDK的大小要么只有6M左右..要么就是在VS2005里面不能調出或者調出后Emulator的窗口很小.請問一下應該怎么設置或者告訴我是什么問題.謝謝…

查看全部問答∨

請問windows系統下數據從底層獲取延遲時間是多少呢?

我的系統是XP,現在要在PCI插槽上加一塊計數器,然后利用MFC編寫的程序來獲取計數器輸出的脈沖電平,該電平的脈沖寬度是1ms。 想問的是從底層計數器讀取外部信號電平到輸出電平到經過PCI總線到我的MFC程序獲取這個電平的上升沿,這個過程一般要多長 ...…

查看全部問答∨

急問,IARFORSTM8中程序中增加一條指令后,延時變長

遇到一奇怪的現象, 在程序的某個地方經常增加一條指令即使是nop();會出現程序的其他地方出現延時變長的現象,如下,即使我在前后增加了關中斷,延時變長差不多18%左右,現無法找到問題的根源, 出現這種情況,只要在增加程序的方再增加一個nop()或延 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 嵊泗县| 大冶市| 平阳县| 措美县| 竹山县| 天柱县| 项城市| 奉化市| 万荣县| 洛浦县| 博罗县| 科尔| 安庆市| 榆中县| 吉首市| 格尔木市| 图们市| 措美县| 花莲市| 静乐县| 广平县| 台安县| 界首市| 石泉县| 石家庄市| 安吉县| 远安县| 平乐县| 太白县| 房产| 黎城县| 安图县| 天祝| 天津市| 南投市| 乌鲁木齐县| 平湖市| 香港| 邯郸市| 德令哈市| 凤山县|