EG 我有这个:
MOVW R1, #(:lower16:(selRef_stringWithUTF8String_ - 0xbeee)
MOV R6, R0
MOVT.W R1, #(:upper16:(selRef_stringWithUTF8String_ - 0xbeee)
在操作数的地址之前有 :lower16: 和 :upper16: 。我认为它是因为它处于拇指模式并且指向字符串的指针的大小太大所以它获取下部和上部?请指教。
EG 我有这个:
MOVW R1, #(:lower16:(selRef_stringWithUTF8String_ - 0xbeee)
MOV R6, R0
MOVT.W R1, #(:upper16:(selRef_stringWithUTF8String_ - 0xbeee)
在操作数的地址之前有 :lower16: 和 :upper16: 。我认为它是因为它处于拇指模式并且指向字符串的指针的大小太大所以它获取下部和上部?请指教。
和你猜的一样。在 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:
and:upper:
语法指示该值被分成两个 16 位部分。