冰大,我实在不知道错在哪里了。想了一上午没搞定。。。
现在手机上的效果是,Master里关闭补丁时,不在列表中的号码拨入铃声不响,对方听到的是“您所拨打的号码暂时无法接通”而Master里打开补丁时,不在列表中的号码都会自动接听。。。
我想要的是,关闭补丁时,对不在列表中的号码不做任何处理,正常提醒。
#define PATCH_ID 0xABEF
#ifdef E71Cv41
#define ADDR_GetCalleeNumber 0xA094D15E+1
#define ADR_PlaySound20xA05ABEA4
#define ADR_AutoAnswer0xA09DE7AB
#endif
#ifdef S7Cv47
#define ADDR_GetCalleeNumber 0xA09833EE+1
#define ADR_PlaySound20xA0279E44
#define ADR_AutoAnswer0xA09CF887
#endif
CODE16
EXTERN do_check
RSEG BLACK_LIST_BODY
PUBLIC GetCalleeNumber
GetCalleeNumber:
PUSH {R7,LR}
LDR R7, =ADDR_GetCalleeNumber
BLX R7
POP {R7,PC}
BODY:
PUSH {R0-R7,LR}
BLX do_check
CMP R0, #1
BEQ RP
LDR R1, =PATCH_ID
SWI 0xC4 //void *GetBuffer(int patch_id);
BNE RP
LDR R3, =ADR_AutoAnswer
BLX R3
//SWI 0x29//AutoAnswer
B EXIT
RP:
POP {R0-R7}
LDR R7,=ADR_PlaySound2
BLX R7
//SWI 0x33 //PlaySound2
POP {PC}
B EXIT
EXIT:
POP {R0-R7,PC}
CODE32
RSEG BLACKLIST_DUMP
BLACK_LIST_DUMP:
LDR R12, =BODY
BX R12
CODE16
RSEG RHOOKBLACKLIST:CODE(1)
BLX BLACK_LIST_DUMP
END 本帖最后由 binghelingxi 于 2009-7-25 20:33 编辑
POP {PC}
B EXIT这句是什么意思?
已经修改了程序计数器(PC)的值,就已经跳转到其他地方运行了,再b exit是没有效果的 ARM指令中,
第一个参数,就用R0传送
LDR R1, =PATCH_ID
SWI 0xC4 //void *GetBuffer(int patch_id);
应改为
LDR R0, =PATCH_ID
SWI 0xC4 //void *GetBuffer(int patch_id); RO那句,我测试测试。呵呵。。。
页:
[1]