1. 程式人生 > >(三)ARM 常用匯編指令(2)之ARM堆疊保護/恢復現場分析

(三)ARM 常用匯編指令(2)之ARM堆疊保護/恢復現場分析

3.4 ARM堆疊保護/恢復現場分析

3.4.1 堆疊的分類

根據堆疊的生成方式,又可以分為遞增堆疊(Ascending Stack)和遞減堆疊(DecendingStack),當堆疊由低地址向高地址生成時,稱為遞增堆疊,當堆疊由高地址向低地址生成時,稱為遞減堆疊。這樣就有四種類型的堆疊工作方式,ARM 微處理器支援這四種類型的堆疊工作方式,即:

(1) Full descending 滿遞減堆疊

堆疊首部是高地址,堆疊向低地址增長。棧指標總是指向堆疊最後一個元素(最後一個元素是最後壓入的資料)。

ARM-Thumb過程呼叫標準和ARM、Thumb C/C++編譯器總是使用Full descending 型別堆疊。

(2) Full ascending 滿遞增堆疊

堆疊首部是低地址,堆疊向高地址增長。棧指標總是指向堆疊最後一個元素(最後一個元素是最後壓入的資料)。

(3) Empty descending 空遞減堆疊

堆疊首部是低地址,堆疊向高地址增長。棧指標總是指向下一個將要放入資料的空位置。

 (4) Empty ascending 空遞增堆疊

堆疊首部是高地址,堆疊向低地址增長。棧指標總是指向下一個將要放入資料的空位置。

在ARM中,一般是滿堆疊,堆疊生長方向是從上向下遞減的(51相反為遞增)。

3.4.2 堆疊保護/恢復現場程式碼分析

在寫ARM裸板我們會經常寫如下程式碼:

保護現場:

mov ip,sp

stmfdsp!,{fp,ip,lr,pc} 等價於 push {fp, ip, lr, pc}

sub fp,ip,#4

恢復現場

sub sp,fp,#12

ldmfd sp,{fp,sp,pc}

       mov ip,sp 將sp棧指標暫存器儲存在ip暫存器中,stmfd sp!(fp,ip,lr,pc)將fp ip lr pc依次入棧,這樣注意高編號對應高地址入棧,!表示sp也依次偏移(減),sub fp,ip,#4 ip是入棧前sp指向位置的地址,減4是向低地址偏移4個位元組的位置的地址,儲存在fp暫存器中,也就是fp儲存堆疊的頭部的地址。 

sub sp,fp,#12保護現場後sp可能發生變化,通過fp-12可以準確找到儲存現場時sp指向的位置儲存到sp中,ldmfdsp,{fp,sp,pc},從sp指向的位置出棧,fp儲存到fp暫存器中(依然是堆疊的頭部的地址),ip(入棧前sp指向位置的地址)儲存到sp中,相當於恢復了sp的值,lr(下下條指令的地址)儲存到pc中,然後程式從pc指向的位置執行。圖示分析如下:


相關推薦

ARM 用匯指令(2)ARM堆疊保護/恢復現場分析

3.4 ARM堆疊保護/恢復現場分析 3.4.1 堆疊的分類 根據堆疊的生成方式,又可以分為遞增堆疊(Ascending Stack)和遞減堆疊(DecendingStack),當堆疊由低地址向高地址生成時,稱為遞增堆疊,當堆疊由高地址向低地址生成時,稱為遞減堆疊。這樣就

Android 圖解逆向工程中ARM用匯指令

我們走得太快,靈魂都跟不上了。 微小的幸福就在身邊,容易滿足就是天堂。 在逆向和爆破中我們經常會在IDA中接觸到彙編,一般做安卓的不會太瞭解VB回編等,不太瞭解的同學可以先檢視上篇文章《Android ARM常用的彙編指令合集》 再來繼續我們

ARM 用匯指令

編寫 中括號 OS 編程 body 需要 實現 十進制數 spa ARM 匯編程序的框架結構 .section .data <初始化的數據> .section.bss <未初始化的數據> .section .text .glo

ARM用匯指令

(1)GBLL 偽指令用於定義一個全域性的邏輯變數,並初始化為{False}。 GBLL    BOOTLOADER BOOTLOADER   SETL    {TRUE} (2)GET(或 INCL

C#多線程和異步——一些異步程模式

img rar 效率 釋放 http 調用 完成 引用 iar 一、任務並行庫   任務並行庫(Task Parellel Library)是BCL中的一個類庫,極大地簡化了並行編程,這裏以Parallel.For和Parallel.ForEach為例。在C#中for/fo

用匯指令

1=1 乘法 utm 一個 它的 sdn tails copy 轉移指令 CMP A,B 比較A與B其中A與B可以是寄存器或內存地址,也可同時是兩個寄存器,但不能同都是內存地址。這個指令太長見了,許多明碼比較的軟件,就用這個指令。 MOV A,B 把B的值送給A其中,A與B

用匯指令及其影響的標誌位

說明 比較 cxz 個數 test car size through with 加法指令 ADD (addition) 指令對標誌位的影響: CF=1 最高有效位向高位有進位 CF=

x64 ASM 用匯指令

語法習慣 這裡主要說AT&T風格的組合語言風格。因為gdb看反彙編預設的風格就是AT&T風格的,Intel風格的這裡就不做介紹。 - 立即數,$ 開頭 - 暫存器,% 開頭 - 取地址裡面的值,偏移量(%暫存器)// 除了 lea 取地

一些用匯指令的注意事項

資料傳送指令 MOV:暫存器之間傳送注意,源和目的不能同時是段暫存器;程式碼段暫存器CS不能作為目的;指令指標IP不能作為源和目的。立即數不能直接傳送段暫存器。 源和目的運算元型別要一致;除了串操作指令外,源和目的不能同時是儲存器運算元。 XCHG交換指令:運算元可以是通用暫

數據結構串---KMP模式匹配算法獲取next數組

要求 求值 直接 都是 malloc image turn src 計算 (一)獲取模式串T的next數組值 1.回顧 我們所知道的KMP算法next數組的作用 next[j]表示當前模式串T的j下標對目標串S的i值失配時,我們應該使用模式串的下標為next[j]接著去和

WPF的訊息機制- WPF內部的5個視窗處理啟用和關閉的訊息視窗以及系統資源通知視窗

原文: WPF的訊息機制(三)- WPF內部的5個視窗之處理啟用和關閉的訊息視窗以及系統資源通知視窗 目錄 WPF的訊息機制(一)-讓應用程式動起來 WPF的訊息機制(二)-WPF內部的5個視窗 (1)隱藏訊息視窗 (2)處理啟用和關閉的訊息視窗和系統資源通知視窗

大資料Spark--- Spark核心API,Spark術語,Spark三級排程流程原始碼分析

一、Spark核心API ----------------------------------------------- [SparkContext] 連線到spark叢集,入口點. [HadoopRDD] extends RDD 讀取hadoop

SpringCloud從入門到進階——源碼探究Eureka集群replicas的unavailable故障

過多 1.5 微服務 nodes 設置 != des url gets 內容   本節從源碼的角度探討了Eureka控制臺中為何replicas(副本)顯示unavailable(不可用)的原因。在源碼層級解讀了Eureka Server的replicas是如何解析,以及r

卷積神經網路:權值初始化方法Xavier與MSRA

基礎知識 首先介紹一下Xavier等初始化方法比直接用高斯分佈進行初始化W的優勢所在: 一般的神經網路在前向傳播時神經元輸出值的方差會不斷增大,而使用Xavier等方法理論上可以保證每層神經元輸入輸出方差一致。 這裡先介紹一個方差相乘的公式,以便理解Xav

《設計資料密集型應用/DDIA》精要翻譯 :資料的儲存和獲取底層資料結構

看了這三章,我最大的收貨並不是說學到了什麼新的知識,而是對以前通過各種渠道所掌握的知識重新進行了梳理和歸納,使它們有種脈絡相通的感覺。 一、驅動你的資料庫的資料結構 這也許是世界上最簡單的資料庫實現: db_set () {

Java多線程程模式實戰指南:Two-phase Termination模式

增加 row throws mgr 額外 finally join table 還需 停止線程是一個目標簡單而實現卻不那麽簡單的任務。首先,Java沒有提供直接的API用於停止線程。此外,停止線程時還有一些額外的細節需要考慮,如待停止的線程處於阻塞(等待鎖)或者等待狀態(等

日常程練習

style tar code 依次 span 二叉 div 前序遍歷 cin 一、樹的遍歷算法 樹的創建 struct BinaryTreeNode { int val; BinaryTreeNode* left; BinaryTreeNode*

Python字符編碼與文件處理

python3 固定 one 加載 not rdl 寫到 bin 存在 計算機要想工作必須通電,也就是說‘電’驅使計算機幹活,而‘電’的特性,就是高低電平(高低平即二進制數1,低電平即二進制數0),也就是說計算機只認識數字   編程的目的是讓計算機幹活,而編程的結果說白

從零開始學習音視頻程技術 開發環境搭建Qt4.86手動設置環境,主要就是設置g++和qmake,比較透徹,附下載鏈接

路徑 details 分享 baidu 末尾 是我 其中 找到 source 1.先下載安裝Qt 我們使用的版本是4.8。 可以自行百度下載也可以從下面的網盤地址下載: Qt庫和編譯器下載: 鏈接:http://pan.baidu.com/s/1hrUxLIG 密碼

並發:從AQS到CountDownLatch與ReentrantLock

splay public 繼續 for admin font 通信 html integer 一、目錄 1、AQS簡要分析 2、談CountDownLatch 3、談ReentrantLock 4、談消費者與生產者模式(not