2013-06-27 2 views
2

예컨대 나는이 있습니다IDA Pro에서 두 번째 ARM 피연산자의 ':: lower16 ::'은 무엇입니까?

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

있습니다 : lower16 : 및 : upper16 : 피연산자의 주소 이전. 엄지 손가락 모드와 문자열에 대한 포인터 크기가 너무 커서 위아래 부분을 가져 오는 것이기 때문에 나는 그것을 추정합니까? 제발 조언.

답변

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 프로 결합 치값이 선택기의 주소와 일치하고, 값이 2 개의 16 비트 부분으로 분할되는 것을 나타내도록하고 :lower::upper: 구문을 사용하는 인식.