爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3755|回复: 18
收起左侧

[Flash修改] 冰大,昨天那种想法感觉稍微难了点,还是就先照简单的弄吧!

  [复制链接]
发表于 2009-8-19 13:42:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册会员 微信登录

x
  1. AERO:
  2.                      PUSH    {R0-R7,LR}
  3.                      LDR     R3, =X
  4.                      BLX     R3                     
  5.                      LDR       R0, =PATCH_ID
  6.                      SWI       0xC4
  7.                      BEQ      EXIT
  8.                      LDR      R3, =Y
  9.                      BLX      R3
  10. EXIT:
  11.                      POP     {R0-R7,PC}
复制代码
昨天那种想法我感觉太难了,现在就直接这样吧。默认先跳到X,再给是否跳到Y加个MP开关。

上面的可以实现了吗?
发表于 2009-8-19 17:00:36 | 显示全部楼层
不了解的帮顶
回复 支持 反对

使用道具 举报

发表于 2009-8-19 20:30:39 | 显示全部楼层

  1. #ifdef        UNK_MP

  2. #define        PATCH_ID        0xFFFFF
  3. #define        FUNC_A                0xA0000000
  4. #define        FUNC_B                0xA1000000
  5.        
  6.         PUSH        {R0-R7,LR}
  7.         LDR        R0, =PATCH_ID
  8.         SWI        0xC4
  9.         CMP        R0, #0
  10.         BEQ        EXIT
  11.         LDRB        R0, [R0, #1]
  12.         CMP        R0, #0
  13.         BEQ        EXIT
  14.         CMP        R0, #1
  15.         BEQ        DO_FUNC_A
  16.         CMP        R0, #2
  17.         BNE        EXIT
  18.         LDR        R0, =FUNC_B
  19.         BLX        R0
  20.         B        EXIT
  21. DO_FUNC_A
  22.         LDR        R0, =FUNC_A
  23.         BLX        R0
  24. EXIT
  25.         POP        {R0-R7,PC}
  26.        
  27.         0xB1C2D3E4,0x000FFFFF,0000000000000000,"\
  28.         {patch=`UNK_MP` ver=0 cp=BingK id=0xFFFFF}","\
  29.         {01 o `Function` `None`=0 `Use A`=1 `Use B`=2}","\
  30.         ",00
  31. #endif
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-8-19 21:07:20 | 显示全部楼层
赶紧就这个补丁加深下对MP的理解。。。
回复 支持 反对

使用道具 举报

发表于 2009-8-19 21:16:53 | 显示全部楼层
虽然没看懂  但是强烈的支持LOQUAT兄弟!
回复 支持 反对

使用道具 举报

发表于 2009-8-19 21:22:55 | 显示全部楼层
哦,代码看懂了,MP补丁太有意思,要加紧看书啊。
加油加油......
回复 支持 反对

使用道具 举报

发表于 2009-8-19 21:35:33 | 显示全部楼层
冰大前面的代码大致看懂啦。。。
LDRB        R0, [R0, #1]  //这句的意思是不是读取MP补丁配置中的这一行?
{01 o `Function` `None`=0 `Use A`=1 `Use B`=2}","\
如果我现在想增加配置呢?
{02 o `Function1` `None`=0 `Use C`=1 `Use D`=2}","\
{04 o `Function2` `None`=0 `Use E`=1 `Use F`=2}","\
........
回复 支持 反对

使用道具 举报

发表于 2009-8-19 23:31:50 | 显示全部楼层
{01 o `Function` `None`=0 `Use A`=1 `Use B`=2}","\
自己研究一下mp的语法吧,chaos那个网站下载的master里面有源码和俄文说明
或自己摸索,我也是在写master.elf的过程中慢慢摸索出来的
01表示的是从配置数据的第一字节开始,o或options表示的是选择项类型,这个类型数据占用一个字节
所以我们要的数据位于配置数据的第一个字节,就是LDRB        R0, [R0, #1]
回复 支持 反对

使用道具 举报

发表于 2009-8-20 09:39:38 | 显示全部楼层
http://chaos.allsiemens.com/
只找到chaos的一个主页,一共才四个标签页,没找到master,汗!!!
回复 支持 反对

使用道具 举报

发表于 2009-8-20 10:27:01 | 显示全部楼层
本帖最后由 loquat 于 2009-8-20 12:44 编辑

哈哈
{02 o `Function1` `None`=0 `Use C`=1 `Use D`=2}","\
上面这个还不会加,就搞了这么一个。冰大看看,应该没问题吧?
  1. #define   PATCH_ID   0x00E71
  2. #ifdef        UNK_MP
  3. ifdef    E71Cv41
  4. #define        FUNC_A                0xA0000000
  5. #define        FUNC_B                0xA1000000
  6. #define        FUNC_C                0xA0100000
  7. #define        FUNC_D                0xA1100000
  8. #define        FUNC_E                0xA0200000
  9. #define        FUNC_F                0xA1200000
  10. endif
  11.         PUSH        {R0-R7,LR}
  12.         LDR        R0, =PATCH_ID
  13.         SWI        0xC4
  14.         CMP        R0, #0
  15.         BEQ        EXIT
  16.         LDRB        R0, [R0, #1]
  17.         CMP        R0, #0
  18.         BEQ        EXIT
  19.         CMP        R0, #1
  20.         BEQ        DO_FUNC_A
  21.         CMP        R0, #2            
  22.         BEQ        DO_FUNC_B
  23.         CMP        R0, #3
  24.         BEQ        DO_FUNC_C
  25.         CMP        R0, #4
  26.         BEQ        DO_FUNC_D
  27.         CMP        R0, #5
  28.         BEQ        DO_FUNC_E
  29.         CMP        R0, #6
  30.         BNE         EXIT
  31.         LDR        R0, =FUNC_F
  32.         BLX        R0
  33.         B        EXIT
  34. DO_FUNC_A
  35.         LDR        R0, =FUNC_A
  36.         BLX        R0
  37.         B        EXIT
  38. DO_FUNC_B
  39.         LDR        R0, =FUNC_B
  40.         BLX        R0
  41.         B        EXIT
  42. DO_FUNC_C
  43.         LDR        R0, =FUNC_C
  44.         BLX        R0
  45.         B        EXIT
  46. DO_FUNC_D
  47.         LDR        R0, =FUNC_D
  48.         BLX        R0
  49.         B        EXIT
  50. DO_FUNC_E
  51.         LDR        R0, =FUNC_E
  52.         BLX        R0
  53. EXIT
  54.         POP        {R0-R7,PC}
  55.         
  56.         0xB1C2D3E4,0x00000E71,0000000000000000,"\
  57.         {patch=`UNK_MP` ver=0 cp=BingK id=0x00E71}","\
  58.         {01 o `Function` `None`=0 `Use A`=1 `Use B`=2 `Use C`=3 `Use D`=4 `Use E`=5 `Use F`=6}","\
  59.         ",00
  60. #endif
复制代码
发现这种不是我要的,我要一次搞三个入口冲突的,看来不能用这种。再改改。。。
回复 支持 反对

使用道具 举报

发表于 2009-8-20 12:45:39 | 显示全部楼层
本帖最后由 loquat 于 2009-8-20 13:52 编辑

看来还是得搞这种。。。
{02 o `Function1` `None`=0 `Use C`=1 `Use D`=2}","\

不知道这个行不行。。。。
#ifdef        UNK_MP
#define   PATCH_ID   0x00E71
ifdef    E71Cv41  
#define        FUNC_A                0xA0000000
#define        FUNC_B                0xA1000000
#define        FUNC_A                0xA0100000
#define        FUNC_B                0xA1100000
#define        FUNC_A                0xA0200000
#define        FUNC_B                0xA1200000
endif
                  //这样子,我照原样copy三份成Hook_X,Hook_Y,Hook_Z
Hook_X:
        PUSH        {R0-R7,LR}
        LDR        R0, =PATCH_ID
        SWI        0xC4
        CMP        R0, #0
        BEQ        EXIT
        LDRB        R0, [R0, #1]
        CMP        R0, #0
        BEQ        EXIT
        CMP        R0, #1
        BEQ        DO_FUNC_A
        CMP        R0, #2
        BNE        EXIT
        LDR        R0, =FUNC_B
        BLX        R0
        B             EXIT
DO_FUNC_A
        LDR        R0, =FUNC_A
        BLX        R0
        B             EXIT         
Hook_Y:
        PUSH       {R0-R7,LR}
        LDR        R0, =PATCH_ID
//这里是否可以用其他寄存器存PATCH_ID吗比如R1-R7、R8-R14、PC(当然前提是和后面的CMP保持一致)
        SWI        0xC4
        CMP        R0, #0
        BEQ        EXIT
        LDRB       R0, [R0, #2]
//你说的option只占,一个字节,我也看了其他的MP配置部分。这里似乎可以这么写。目的是读取红色那行!
  1. LDRB 指令用于从存储器中将一个8 位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。该指令通常用于从存储器中读取8 位的字节数据到通用寄存器,然后对数据进行处理。当程序计数器PC 作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。
复制代码
CMP        R0, #0
        BEQ        EXIT
        CMP        R0, #1
        BEQ        DO_FUNC_C
        CMP        R0, #2
        BNE        EXIT
        LDR        R0, =FUNC_D
        BLX        R0
        B        EXIT
DO_FUNC_C
        LDR        R0, =FUNC_C
        BLX        R0
        B             EXIT
Hook_Z:
        PUSH        {R0-R7,LR}
        LDR        R0, =PATCH_ID
        SWI        0xC4
        CMP        R0, #0
        BEQ        EXIT
        LDRB        R0, [R0, #3]
        CMP        R0, #0
        BEQ        EXIT
        CMP        R0, #1
        BEQ        DO_FUNC_E
        CMP        R0, #2
        BNE        EXIT
        LDR        R0, =FUNC_F
        BLX        R0
        B        EXIT
DO_FUNC_E
        LDR        R0, =FUNC_E
        BLX        R0
EXIT
        POP        {R0-R7,PC}
        
        0xB1C2D3E4,0x00000E71,0000000000000000,"\
        {patch=`UNK_MP` ver=0 cp=BingK id=0x00E71}","\
        {01 o `Function` `None`=0 `Use A`=1 `Use B`=2}","\
        {02 o `Function` `None`=0 `Use C`=1 `Use D`=2}","\
        {03 o `Function` `None`=0 `Use E`=1 `Use D`=F}","\
        ",00
#endif
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2009-8-20 13:20:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2009-8-20 19:36:48 | 显示全部楼层
http://chaos.allsiemens.com/download/Master.rar


//这里是否可以用其他寄存器存PATCH_ID吗比如R1-R7、R8-R14、PC(当然前提是和后面的CMP保持一致)

仔细看ARM指令,不是跟你说了参数是怎么传送的吗r0第一个参数,r1第二个,依此类推到R3,后面的参数存到堆栈

照搬是不行的,一些寄存器的参数传送要调整,但思路是很明显的
回复 支持 反对

使用道具 举报

发表于 2009-8-20 20:25:23 | 显示全部楼层
{01 o `Function` `None`=0 `Use A`=1 `Use B`=2}","\
这个配置刷进去一个入口还是只能选择一个去向。
因为原代码只能执行,两个目标都不去,或者只执行其中的一个目标。

现在应该有的是
从hook能调到X并能于后跳到Y...
回复 支持 反对

使用道具 举报

发表于 2009-8-20 20:51:34 | 显示全部楼层
  1. #define        PATCH_ID        0x00E71
  2. #define        FUNC_A                0xA0000000
  3. #define        FUNC_B                0xA1000000  

  4.                 RSEG        HOOK
  5.         CODE16
  6.         LDR        R1, =BODY_
  7.         BLX         R1
  8.                 RSEG        BODY
  9.         CODE16
  10. BODY_
  11.         PUSH      {R0-R7,LR}
  12.         LDR        R0, =PATCH_ID
  13.         SWI        0xC4
  14.         CMP        R0, #0
  15.         BEQ         EXIT
  16.         LDRB      R0, [R0, #1]
  17.         CMP        R0, #0
  18.         BEQ        DO_FUNC_A
  19.         CMP        R0, #1
  20.         LDR        R0, =FUNC_B
  21.         BLX        R0
  22.         CMP        R0, #2
  23.         BNE        EXIT
  24. DO_FUNC_A
  25.         PUSH        {R0-R7,LR}
  26.         LDR        R0, =FUNC_A
  27.         BLX        R0
  28. EXIT
  29.         POP        {R0-R7,PC}
  30.         END
  31. /*
  32. #pragma enable old_equal_ff
  33. 00610D0: 0xB1C2D3E4,0x00000E71,0000000000000000,"\
  34. {patch=`UNK_MP` ver=0 cp=BingK id=0x00E71}","\
  35. {01 o `Function` `A`=0 `B`=1 `Both`=2}",00
  36. #pragma disable old_equal_ff
  37. */
复制代码
  1. -carm
  2. -Z(CODE)BODY=A15644B0-FFFFFFFF
  3. -Z(CODE)HOOK=A067A6F4-FFFFFFFF
复制代码
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2011-2-24 14:06:52 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复 支持 反对

使用道具 举报

发表于 2011-2-28 20:40:04 | 显示全部楼层
本帖最后由 loquat 于 2011-2-28 20:42 编辑

楼上骂人

点评

呵呵,近期广告多,显然是骂广告的,楼被抽了之后,你就变成受害者了。我已经把他解禁了,完了那个帖子也禁止掉。此事算完结了吧,呵呵  发表于 2011-2-28 23:17
回复 支持 反对

使用道具 举报

发表于 2011-2-28 23:23:08 | 显示全部楼层
楼上那位。。没骂你 饭饭以前有广告的帖子 看我骂的谁 不想说你了

点评

冏,我好多天没上来看了.上来就看错...  发表于 2011-3-1 11:22
回复 支持 反对

使用道具 举报

发表于 2011-3-1 17:06:41 | 显示全部楼层
回复 qiuyuke 的帖子

不干  精神损失费1W米
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

小黑屋|Archiver|手机版|爱技术 ( 沪ICP备08115260号-3 )

GMT+8, 2024-5-7 13:31

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表