簡體   English   中英

在ARM / Thumb(IOS)上解碼BLX指令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM