- 积分
- 567
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|

楼主 |
发表于 2006-1-28 13:39:11
|
显示全部楼层
原帖由 jasmine126 于 2006-1-28 09:55 AM 发表
版主的
0x060000: 074B984207DC074B984204DBC01AC000
0x060010: 054BC01810BD7DF0EEFD044B1847C046
0x060020: 2005000095040000500006A00DDC0DA0
是怎么改的?
这里面有几个地址需要移植,一般是放在补丁的最末尾,比如上面的0x060020: 2005000095040000500006A00DDC0DA0,一般就是BL,LDR之类的,直接移是比较容易出错的,因为不知道补丁要干什么,所以还是要反编译出来看看源码,上面那个压缩包里面的就是我整理的源码,用keil打开,其实这个补丁就是一个条件判断,以SL的为例,因为索引是从#1172增加到#1312,转换成16进制就是#494到#520,补丁做的工作就是:
如果pit<#495||pit>520,就跳出补丁,按照原来的程序走,如果pit>=495||pit<520,就将索引位置指向到0xA0060050开始处...
arm实现代码如下:
- $arm9e
- AREA STARTUPCODE, CODE
- CODE16
- main:
- LDR R3, =0x520
- CMP R0, R3
- BGT exit
- LDR R3, =0x4C4
- CMP R0, R3
- BLT exit
- SUB R0, R0, R3
- LSL R0, R0, #3
- LDR R3, =0xA0060050
- ADD R0, R0, R3
- POP {R4,PC}
- exit:
- BL 0xA00DDC0E
- LDR R3, =0xA00DDC24+1
- BX R3
- NOP
- AREA hook, CODE, AT 0xA00DDC20
- CODE16
- BL main
- END
复制代码
[ 本帖最后由 starfriend 于 2006-1-28 13:42 编辑 ] |
|