冰大,纯希望,知道你很忙。^_^
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。 没有什么万能的方法。
要想自己做补丁,armdebugger是必须要掌握的,还要掌握IAR或KEIL之类的编译器的使用,
armdebugger很难吗?打上CGSN补丁,联机,参考VC或者TC的调试器操作摸索
编译器,参考已有的工程模仿摸索
如此而已,我就是这么来的
拨号的时候就关闭了键盘灯,能不能帮忙搞成接通后关闭键盘灯?
在接通振动补丁之后再做一个 HOOK
播放音乐时自动启动MediaPlayerPlus.elf
在播放音乐的CSM的oncreate做HOOK启动,onclose做HOOK关闭
思路上如此。 都是摸索,现在我还在慢慢学习摸索汇编语言。汗
冰大,哪天有空你给把这两个补丁做出来吧?
希望....... 没需要,不做,做起来也未必这么容易 播放音乐时自动启动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
加一句
s_0ZbinAppElfsi
DCB "0:\\ZBin\\App\\ElfsInHotKeys.elf" 还有一个,第一次自己尝试把接通振动的补丁从依赖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 上面的源码编译不过。
-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]