当前位置: 代码迷 >> 汇编语言 >> 【真心请问】一段很短的ARM代码,逻辑下有点乱了,求伪代码或C代码
  详细解决方案

【真心请问】一段很短的ARM代码,逻辑下有点乱了,求伪代码或C代码

热度:5203   发布时间:2013-02-26 00:00:00.0
【真心请教】一段很短的ARM代码,逻辑上有点乱了,求伪代码或C代码
本帖最后由 giter888 于 2013-01-10 11:27:59 编辑
其中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保存了现场等下就回的来.
------解决方案--------------------------------------------------------
引用:
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;
  相关解决方案