本文作者:i春秋作家——HAI_
sget-object v0, Lcom/gameloft/android/ANMP/GloftDMHM/Game;->N:Lcom/gameloft/android/ANMP/GloftDMHM/Game;
new-instance v1, Lcom/gameloft/android/ANMP/GloftDMHM/x;
# 这里的意思就是new 了一个名为 x的类。
(1)STMFD SP!, {R3-R8,R10,LR} 这个看起来很复杂其实作用就是入栈
(2)CMP R0, #1 CMP指令的作用是把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,更新CPSR中条件标志位的值。CMP会进行一次减法运算,不存储结果,只更改条件标志位。这里是 把传入的R0和1进行比较。
(3)LDR R5, =(_GLOBAL_OFFSETTABLE - 0x209014)LDR的作用就是把数据送入R5,_GLOBAL_OFFSET_TABLE_的含义就是全局偏移量。
(4)MOV R6, R0 传入的参数给R6
(5)ADD R5, PC, R5 ; _GLOBAL_OFFSETTABLE ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。
(6) BNE loc_209028BNE指令是“不相等(或不为0)跳转指令”:
(7) LDR R3, =(off_A45CC4 - 0xA48944)
(8)MOV R2, #2,给R2赋值为2
(9) LDR R3, [R5,R3] ; unk_A56BE0把R5+R3的地址写入R3
(10) STR R2, [R3] 32位的大小送入寄存器,把R3的地址送入R2
(11)LDMFD SP!, {R3-R8,R10,PC} 出栈,也就是所谓的释放。
(1)CMP R0, #0比较,如何R0=0就执行一下语句。
(2)MOV R3, #1 R3赋值为1
(3)LDREQ R2, =(off_A45CC4 - 0xA48944) EQ的意识是如果相等的话就执行。
(4)MOVEQ R1, R0如何R1==R0,则执行mov R1,R0。
(5)LDREQ R2, [R5,R2] ;如果R2的地址==R5+R2则执行
(6)STREQ R3, [R2]如果R3的值和R2的相等,则执行
(7)BEQ loc_209074 如何R3==R2,跳转
(8)CMP R0, #3 BNE loc_20905C,如果R0!=3就跳转。
CMP R0, #4, BNE loc_20907C如果不等于4则跳转到loc_20907C
(1)CMP R0, #6 BEQ loc_209064如果R0==6则跳转
(2)LDR R0, [R4] BNE loc_2090D4如果R0!=R4就跳转。
(1)CMP R6, #8 BNE loc_209118,如果R6!=8就跳转
(2)MOV R1, #0x49C8 BL sub_208DAC如果8R==6,就会有一个很大的数字生成,这里可能就是初始化的数值,可以通过好几种方法来观察。
const/16 v3, 0x9
invoke-static {v3}, Lcom/gameloft/android/ANMP/GloftDMHM/Game;->nativeBillingDone(I)V
>>>>>>黑客入门必备技能 带你入坑,和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩!