[英]Decoding BLX instruction on ARM/Thumb (IOS)
我已閱讀了大部分ARM文檔,但仍無法解碼BLX指令。 這是兩個例子:
__text:0000347C 02 F0 B2 ED BLX _objc_msgSend
__text:0000469C 01 F0 A2 EC BLX _objc_msgSend
這兩個都應該去同一個地方,虛擬地址0x5FE4如下所示:
__symbolstub1:00005FE4 38 F0 9F E5 LDR PC, =__imp__objc_msgSend
但是,我無法弄清楚使用它們的指令字節從上述兩個地址(0x347C和0x469C)獲得的計算。 根據ARM文檔,它應該是一個相對跳躍,使用右移2,但數字不起作用。
任何人都可以幫忙嗎?
首先,指令被打印為兩個小端16位字段。 要匹配ARM參考手冊中的字節順序,您需要對每個字段進行字節交換。 對於第一條指令,它給出:
F0 02 ED B2
要么
11110000000000101110110110110010.
這是BLX指令的T2編碼。 將其分解為ARM中標識的字段:
11110 0 0000000010 11 1 0 1 1011011001 0
S imm10H J1 J2 imm10L
然后按照說明解釋字段:
I1 = NOT(J1 EOR S) = 0
I2 = NOT(J2 EOR S) = 0
imm32 = SignExtend(S:I1:I2:imm10H:imm10L:00)
= SignExtend(0000000000010101101100100)
= 0x00002b64
這恰好是0x5FE4 - 0x3480
(記住, PC
在Thumb / Thumb 2中提前4個字節)。
我相信你可以自己完成第二個例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.