其中isOurApk_ptr DCD 0xFFFFFFFF
另外,那个R10,R11哪来的啊?
EXPORT com_aes_Exec_decryptData
com_aes_Exec_decryptData
var_11C= -0x11C
PUSH {R4-R7,LR} ; Push registers
MOV R7, R11 ; Rd = Op2
MOV R6, R10 ; Rd = Op2
MOV R5, R9 ; Rd = Op2
MOV R4, R8 ; Rd = Op2
PUSH {R4-R7} ; Push registers
MOVS R4, R3 ; Rd = Op2
LDR R3, =(isOurApk_ptr - 0x1184) ; Load from Memory
SUB SP, SP, #0xFC ; Rd = Op1 - Op2
MOV R10, R0 ; Rd = Op2
ADD R3, PC ; Rd = Op1 + Op2
LDR R3, [R3] ; Load from Memory
MOVS R5, #0 ; Rd = Op2
LDR R3, [R3] ; Load from Memory
CMP R3, #1 ; Set cond. codes on Op1 - Op2
BNE loc_120C ; Branch
------解决方案--------------------------------------------------------
PUSH以上可以暂时放开,只是跳转前的寄存器现场保存,3个ldr命令,第一条将符号地址-去xx的地址值装到R3,第2个ldr是将R3里面的数据表示的地址值的那段数据装到R3,这时候的R3是第一条ldr的地址值+PC的地址值,第3个同理第2个.
最后哦的cmp和bne 就简单了,第一个比较,不等就跳到后面那个符号地址去执行.
PUSH保存了现场等下就回的来.
------解决方案--------------------------------------------------------
第一个ldr我手误打错了,应该是符号地址-去xx的地址值指向的那段内存的值,装到R3,
ldr reg,=(a) 这种都是把 ()里面的东西当地址值,这条指令相当与 reg = *a;