loquat 发表于 2009-7-25 13:23:53

冰大,我实在不知道错在哪里了。想了一上午没搞定。。。

现在手机上的效果是,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:31:10

本帖最后由 binghelingxi 于 2009-7-25 20:33 编辑

    POP     {PC}
    B       EXIT这句是什么意思?

已经修改了程序计数器(PC)的值,就已经跳转到其他地方运行了,再b exit是没有效果的

binghelingxi 发表于 2009-7-25 20:34:56

ARM指令中,
第一个参数,就用R0传送

    LDR   R1, =PATCH_ID
    SWI         0xC4 //void *GetBuffer(int patch_id);

应改为

    LDR   R0, =PATCH_ID
    SWI         0xC4 //void *GetBuffer(int patch_id);

loquat 发表于 2009-7-25 21:42:03

RO那句,我测试测试。呵呵。。。
页: [1]
查看完整版本: 冰大,我实在不知道错在哪里了。想了一上午没搞定。。。