Arm64彙編 BFXIL指令

2021-10-02 22:49:39 字數 1459 閱讀 7592

下屬專案

測試用例數量

問題背景無0

解決方法無1

總結無0復現一套加密演算法時,遇到了bfxil指令。

ida中顯示情況如下:

bfxil           w9, w16, #2

, #2

ida使用fn+f5操作得到偽**如下:

v4 = v4 |

((v8 &

0xfc

)>>2)&3;

其中v4就是w9,(v8 & 0xfc)這個整體就是w16,定義如下:

unsigned

int v4;

// w9

因為不太了解這條指令,所以也不知道解析的偽**是不是正確的。

ida這樣解析出來的偽**是錯誤的。

先在armdeveloper搜尋這條指令,知道了這是無符號位域提取指令。

有2種語法:

bfxil wd, wn, #lsb, #width ;

32-bit

bfxil xd, xn, #lsb, #width ;

64-bit

意思是:從wn暫存器的第lsb位開始,提取width位,替換wd暫存器的最低width位,剩餘高位不改變。下面分析我們的**:

bfxil           w9, w16, #2

, #2

可以知道是從w16暫存器的第2位開始,提取2位,替換w14暫存器的最低2位,然後w14暫存器剩餘高位不改變。這不就是先把w16暫存器先整體右移2位,然後w16&3從而保留最低2位,然後再用w14和前面「w16&3」的結果進行「|」操作嗎?因此在ida解析出來的如下結果:

v4 = v4 |

((v8 &

0xfc

)>>2)&3;

做進一步修正得到以下結果:

v4 = v4 |((

(v8 &

0xfc

)>>2)

&3);

測試後修正**是能正確工作的!可以知道ida在有些**的解析還是會出錯。

arm64彙編——bfxil指令的意思是從wn暫存器的第lsb位開始,提取width位,替換wd暫存器的最低width位,剩餘高位不改變。在逆向過程中遇到這種指令,在armdeveloper**搜尋指令了解意思後,即可復現。

如果本文對你有幫助,不如請我一罐可樂吧 ?

問題背景

解決方法

總結

arm64記憶體訪問指令小結

如下指令,用在32bit arm處理器上面是沒有問題的,但是用在arm64時,就會出現下面這個data abort exception 對比手冊發現實際上64bit的str指令,當使用wt暫存器時,是按照64bit來訪問的,故將彙編 更改為如下,ok,成功點亮led led on mov x7,0x...

arm64入棧出棧 棧 ARM64

棧 棧 是一種具有特殊的訪問方式的儲存空間 後進先出,last in out firt,lifo sp和fp暫存器 sp暫存器在任意時刻會儲存我們棧頂的位址.fp暫存器也稱為x29暫存器屬於通用暫存器,但是在某些時刻我們利用它儲存棧底的位址 注意 arm64開始,取消32位的 ldm,stm,pus...

ARM64除錯環境

自從上一次zctf做了一道arm64的逆向題目後,我決定記錄下利用qemu搭建arm64的環境的過程,以後肯定會遇到更多arm平台下的reverse和pwn。我要模擬的是64位的arm環境,所以需要使用的是qemu system aarch64。在kali下,使用apt get install qe...