閑扯ARM指令集一

由於最近在研究ARM的VMP方案與ARM模擬執行技術,所以每天都要苦逼著看ARM的文檔,我在這裡做個簡單的小結。

ARMv7 同時支持兩種主要的指令集:ARM和Thumb 指令集。

ARM與Thumb指令集的區別

- Thumb 指令集指令長度:16或32,16位為主

- Thumb-16 大部分只能訪問前8個寄存器 R0-R7(少數可以訪問R8-R15)

- Thumb-32 可以訪問所有的ARM core 寄存器 R0-R15

- ARM 指令集都是32位的,內存中4位元組對齊

ARM和Thumb 指令集能自由的切換,怎麼切換呢?

處理器無論在ARM還是Thumb狀態下都可以通過BX/BLX/LDR /LDM 切換不同的指令集。

條件執行

ARM和Thumb的大部分指令都是可以「條件執行」,顧名思義就是需要滿足某種條件指令才會執行否則等效於空指令。

ARM中有一個特殊的寄存器:APSR寄存器,APSR寄存器叫做標誌寄存器,裡面的每一項二進位位都賦予了一定的意義。

其中比較著名的:N,Z,C,V 條件標誌,指令中有一個cond 描述欄位,用於描述指令執行的條件,只有執行條件與APSR的條件標誌寄存器滿足,那麼執行會執行。否則就是一條NOP!NOP!NOP!

Thumb指令集的條件執行實現原理稍微有點複雜,不過大部分還是和ARM指令相同,只有少部分不同(例如:CBZ/CBNZ / 16-bit If-Then instruction 這些指令)

ARM指令集編碼格式

cond 欄位:條件執行碼

如果cond = 1111,指令只會被無條件執行。

條件碼的含義如下:

op1 欄位與op共同定義了「指令類別」對應關係如下(表示0 or 1任意)

今天就到這裡吧~明天繼續!


推薦閱讀:

自動化二進位文件分析框架:angr
那些年病毒用過的損招——攻擊調試器
安卓逆向入門(一)
演算法逆向1——簡單演算法逆向
GCHQ 對卡巴斯基實驗室的商業軟體進行逆向工程,卡巴斯基實驗室是否可以提起法律訴訟?

TAG:Android | ARM | 逆向工程 |