安卓逆向 ARM常見彙編指令總結

2022-07-18 14:24:30 字數 1850 閱讀 3468

跳轉指令

b      無條件跳轉

bl 帶鏈結的無條件跳轉

bx 帶狀態切換的無條件跳轉

blx 帶鏈結和狀態的無條件跳轉

儲存器與暫存器互動資料指令(核心)

儲存器:主存和記憶體

ldr:從儲存器中載入資料到儲存器←load

ldr r8,[r9,#

04] r8為待載入資料的暫存器,載入值為r9+0x4所指向的儲存單元

str:將暫存器的資料儲存到儲存器中→store

str r8,[r9,#

04] 將r8暫存器的資料儲存到r9+0x4所指向的儲存單元

ldm:將儲存器的資料載入到暫存器列表→

ldm r0,{r1-r3}將r0指向的儲存單元的資料依次載入到r1,r2,r3暫存器

stm:將乙個暫存器列表的資料儲存到指定的儲存器中

push:將暫存器值推入堆疊

pop:將堆疊值推出到暫存器

swp:將暫存器與儲存器之間的資料進行交換

swp r1, r1 [r0] 將r1暫存器與r0指向的儲存單元的內容進行交換

堆,佇列:資料結構,棧是豎的,後進先出,且只能從棧頂依次填入資料

資料傳輸指令

mov:將立即數或暫存器的資料傳送到目標暫存器

mov r0, #

8 :r0=0x8

資料算數指令

add:+sub:—

mul:*div: /

資料邏輯運算指令

與:and

或:orr

異或:eor

lsl:邏輯左移←

lsr:邏輯右移→

lsl r0,r1,#

2:r0=r1*4

移位:實質是乘,除,類似於小數點移位,但相反。小數點左移,數變小;右移變大。

但邏輯移位,左移變大,右移變小,且按2的倍數進行,因為是2進製。

比較指令

cmp:比較

cmp r0 #

0:r0暫存器中的值與0比較

標誌位:如z位,這個都可以在動態除錯時,暫存器視窗看到

其他指令

協處理器指令:swt (切換使用者模式)

偽指令:dcb

暫存器定址方式

立即定址:mov r0,#1234→r0=0x1234

暫存器定址:mov r0,r1→r0=r1

暫存器移位定址:mov r0,r1,lsl #

2→r0=r1*4

暫存器間接基址偏移定址:ldr r0,[r1,#-4]→將r1暫存器的值-0x4的值作為位址,取出位址中的值給r0

int a=0;這一句簡單高階語言的彙編理解

首先會開闢乙個記憶體儲存單元,然後把0x0這個數放入r0暫存器,然後再把r0暫存器的資料放入記憶體儲存單元。所以:mov r0,#0 str r0,[r11,#0x14+var_20]

注意:變數要看儲存單元位址,不要以為是暫存器,簡單時可以這麼看,但試想,如果暫存器是變數,那得要多少暫存器。暫存器就是乙個橋梁,和儲存器即儲存單元位址互動的東西。

安卓逆向 重溫Thumb彙編指令細節

主要內容 1.thumb指令集詳解 2.thumb直接訪問的暫存器 3.thumb指令集組成部分詳解 4.thumb和arm狀態卻換 5.thumb的常見應用場景 arm處理器支援兩種指令集 arm指令集和thumb指令集。arm指令集指令長度為32位,thumb指令集指令長度為16位。在16位外部...

ARM彙編中的LDR指令總結

ldr只能在當前pc的4kb範圍內跳轉 b只能在當前pc的32m範圍內跳轉 label標號實際上就是個位址 eg 合法 ldr r1,r2 ldr r1,r2,0x4 不能超過0xfff,否側編譯不能通過或者linker時有錯 ldr r1,r2,label 所以這個經常是編譯不能通過,因為labe...

ARM彙編中的常用指令總結

資料傳送指令 mov指令 mov rd目標暫存器,operand 常數 可用暫存器 例子 mov r0,10 r0 10 對應c語言形式 mov r0,r1 r0 r1 mvn指令 按位取反指令 mvn r0,0 r0 0 mvn r1,r2 r1 r2 算術指令 add指令 add rn通用暫存器...