在IDA Pro中,第二个ARM操作数中的':: lower16 ::'是什么?

时间:2013-06-27 08:46:57

标签: objective-c arm ida

E.G我有这个:

MOVW R1, #(:lower16:(selRef_stringWithUTF8String_ - 0xbeee)
MOV  R6, R0
MOVT.W R1, #(:upper16:(selRef_stringWithUTF8String_ - 0xbeee)

有:lower16:和:upper16:在操作数的地址之前。我认为它是因为它的拇指模式和指向字符串的指针的大小太大,所以它取出下部和上部?请指教。

1 个答案:

答案 0 :(得分:2)

就像你猜测的那样。在Thumb-2中,当加载32位数字时,它通常使用MOV / MOVT指令对,例如

MOVW   R1, #0x1234          ; Set the value of R1.      R1 is now 0x1234
MOVT.W R1, #0x5678          ; Set the top-16 bit of R1. R1 is now 0x56781234.

IDA Pro认识到组合的立即值与选择器的地址匹配,并使用:lower::upper:语法指示该值被拆分为两个16位部分。