loquat 发表于 2009-4-20 23:23:13

冰大,纯希望,知道你很忙。^_^

S7Cv47的这个补丁
;Turn off illumination during the call
;(c) ThE TrIFoN, Serega_1
;Version: 2.0
;S7Cv47
422A64: C986DEA0 A10054A1

#pragma enable old_equal_ff
15400A0: 08B5024B9847024B984708BD,0xA0DE86C9
15400B0: 0xA09902EF
#pragma disable old_equal_ff

拨号的时候就关闭了键盘灯,能不能帮忙搞成接通后关闭键盘灯?
纯粹是希望,很忙的话可以置后考虑或者不考虑。希望......

另外,有一个想法:
播放音乐时自动启动MediaPlayerPlus.elf


能不能教我一个,做这种小补丁的万能法?
就是到了指定事件之后运行一个文件或者功能地址。
比如接通关闭键盘灯、播放音乐自动启动MediaPlayerPlus。

BingK 发表于 2009-4-21 00:20:58

没有什么万能的方法。

要想自己做补丁,armdebugger是必须要掌握的,还要掌握IAR或KEIL之类的编译器的使用,
armdebugger很难吗?打上CGSN补丁,联机,参考VC或者TC的调试器操作摸索
编译器,参考已有的工程模仿摸索
如此而已,我就是这么来的

拨号的时候就关闭了键盘灯,能不能帮忙搞成接通后关闭键盘灯?
在接通振动补丁之后再做一个 HOOK

播放音乐时自动启动MediaPlayerPlus.elf
在播放音乐的CSM的oncreate做HOOK启动,onclose做HOOK关闭

思路上如此。

loquat 发表于 2009-4-21 10:03:18

都是摸索,现在我还在慢慢学习摸索汇编语言。汗
冰大,哪天有空你给把这两个补丁做出来吧?
希望.......

BingK 发表于 2009-4-21 11:44:03

没需要,不做,做起来也未必这么容易

loquat 发表于 2009-7-26 10:09:34

播放音乐时自动启动elf,这里是我抄袭嵌套的源码。
有一个地方不会处理。。。
不知道这个代码还有没有问题。汇编很不懂啊。。。
    RSEG BODY

BODY:
    PUSH    {R0-R4,LR}
    SWI       0x01F8
    CMP   R0, #1          //播放器暂停
    BEQ   OPEN
    CMP   R0, #2//正在播放
    BEQ   OPEN
    B       EXIT
OPEN:
PUSH    {R0-R7,LR}
MOV   R0, #0x80
SWI   0xC7    //C7: SWI_C7
LSL   R5, R4, #4
ADD   R6, R0, #0
ADR   R1, s_0ZbinAppElfsi ; "0:\\ZBin\\App\\ElfsInHotKeys.elf"   //这里不会处理...
MOV   R2, #0x80
SWI   0xC7   
LSL   R4, R5, #5
MOV   R2, #0
MOV   R1, #0
ADD   R0, R6, #0
SWI   0x94    //94: int ExecuteFile(WSHDR *filepath, WSHDR *mimetype)
ADD   R0, R6, #0
SWI   0xC7   
LSL   R1, R5, #4
POP   {R0-R7,PC}
LDR      R0, =CLOSE
SWI      0x4D    //void GBS_StartTimerProc(void *htimer, long ms, void ptr())定时运行
POP {R0-R4}
MOV      R0, #0   
POP    {PC}
CLOSE:
PUSH       {LR}
MOV      R0, #0
SWI   0x94//94: int ExecuteFile(WSHDR *filepath, WSHDR *mimetype)
POP      {PC}
EXIT:
END

binghelingxi 发表于 2009-7-26 10:31:32

加一句
s_0ZbinAppElfsi
DCB "0:\\ZBin\\App\\ElfsInHotKeys.elf"

loquat 发表于 2009-7-26 11:59:00

还有一个,第一次自己尝试把接通振动的补丁从依赖lib的补丁改为常规的。。。
我修改的。#define      _RAMTMR                        0xA8A7F180
#define      GBS_StartTimerProc       0xA0093278
#define      SetVibration                     0xA01B11F3
       RSEG      VIBRA_AT_STATT_START_HOOK
       CODE16
       LDR      R4, =VIBRA_AT_CALL_START
       BLX      R4

      RSEG      VIBRA_AT_CALL_START_BODY
      CODE16
VIBRA_AT_CALL_START
       MOV   R1, LR
       ADD   R1, #4
       ADD   R0, #0x17
       PUSH    {R0,R1}
       NOP
       NOP
       NOP
       PUSH    {R0}
       LDR   R0, =_RAMTMR
       LDR   R1, =TIME
       LDR   R2, =VIBRA_OFF
       ADD   R2, #1
       LDR      R3, =GBS_StartTimerProc
       BLX      R3

      POP   {R0}
      LDR      R0, =POWER
      LDR      R1, =SetVibration
      BLX      R1

      ADD   R2, R5, #0
      ADD   R3, R5, #0
      MOV   R1, #9
      POP   {R0,PC}
VIBRA_OFF:
      PUSH    {LR}
      MOV   R0, #0
      LDR      R1, =SetVibration
      BLX      R1

      POP   {PC}
      DATA
TIME
      DCD      100
POWER
      DCD      50
      END反汇编得到的。ROM:A0063800             ; ---------------------------------------------------------------------------
ROM:A0063800 71 46                     MOV   R1, LR
ROM:A0063802 04 31                     ADD   R1, #4
ROM:A0063804 17 30                     ADD   R0, #0x17
ROM:A0063806 03 B4                     PUSH    {R0,R1}
ROM:A0063808 C0 46                     NOP
ROM:A006380A C0 46                     NOP
ROM:A006380C C0 46                     NOP
ROM:A006380E 01 B4                     PUSH    {R0}
ROM:A0063810 07 48                     LDR   R0, =0xA8A7F230
ROM:A0063812 64 21                     MOV   R1, #0x64
ROM:A0063814 04 A2                     ADR   R2, loc_A0063828
ROM:A0063816 01 32                     ADD   R2, #1
ROM:A0063818 4D DF                     SWI   0x4D   //4D: void GBS_StartTimerProc(void *htimer, long ms, void ptr())
                                          //0xA0093278
ROM:A006381A 01 BC                     POP   {R0}
ROM:A006381C 1E 20                     MOV   R0, #0x1E
ROM:A006381E 7C DF                     SWI   0x7C
ROM:A0063820 2A 1C                     ADD   R2, R5, #0
ROM:A0063822 2B 1C                     ADD   R3, R5, #0
ROM:A0063824 09 21                     MOV   R1, #9
ROM:A0063826 01 BD                     POP   {R0,PC}
ROM:A0063826
ROM:A0063828             ; ---------------------------------------------------------------------------
ROM:A0063828
ROM:A0063828         loc_A0063828                            ; DATA XREF: ROM:A0063814o
ROM:A0063828 00 B5                     PUSH    {LR}
ROM:A006382A 00 20                     MOV   R0, #0
ROM:A006382C 7C DF                     SWI   0x7C   // 7C: unsigned int SetVibration(unsigned int power)    0xA01B11F3
ROM:A006382E 00 BD                     POP   {PC}
ROM:A006382E
ROM:A006382E             ; ---------------------------------------------------------------------------
ROM:A0063830 30 F2 A7 A8 dword_A0063830DCD 0xA8A7F230          ; DATA XREF: ROM:A0063810r

loquat 发表于 2009-7-26 12:01:39

上面的源码编译不过。
-carm
-Z(CODE)VIBRA_AT_CALL_START_BODY=A1562000-FFFFFFFF
-Z(CODE)VIBRA_AT_CALL_START_HOOK=A0EAF160-FFFFFFFF还是这个提示。
Fatal Error: Segment VIBRA_AT_STATT_START_HOOK must be defined in a segment definition option (-Z, -b or
-P)

检查了很多遍了,IAR的配置貌似没有问题。。。
页: [1]
查看完整版本: 冰大,纯希望,知道你很忙。^_^