爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 13903|回复: 14
收起左侧

[教程] 以未接短信定时提醒为例子谈谈补丁的制作

[复制链接]
发表于 2005-11-17 16:34:04 | 显示全部楼层 |阅读模式

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

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

x
手机不幸挂掉,趁重新刷系统的机会

整理下以前的资料

以我发的这个帖子中的未接提醒为例子

建议先阅读下,文章后面的几篇相关文章再阅读,否则可能有点吃力

用小2机会也不是太多,写这个文章得目的是为了回忆下过去



http://mobile.0110.cn/viewthread ... &extra=page%3D4

;---------------------------------------------------------------------------------------
;***  Reminding about the propushchenykh calls v2.3 of *** c Sinclair
;Firmware: C55v24
;Author: Sinclair
;It is renovated: On 16:50 18 June, 2004.
;Modified: Baloo
;For reduced lengpaka, does not interrupt conversation
;It requires patch of ***   Initialization with the start  *** c Sinclair
612050: CC00CC00 DAE1C826
612650: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DA9130F5D7400300F2F4243D67F90800
612660: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3D1FDACF4AEE48403D17DAC508E44840
612670: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3D13D7405600F3F20E139AF10560DACC
612680: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0A9C28414843FD08DA83A8B470453D04
612690: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DA8384B470452D04E6FC3B00DA940891
6126A0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6FC5026E6FDE10088D088C0E00E88E0
6126B0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6FCF003E00DE6FE3B04E6FF0000DA92
6126C0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D62E0806FA913AF5F78E3AF6DA9130F5
6126D0: FFFF 0DE7
;612668: 3D17 CC00 ; to open signal about Notes
;612670: 3D13 CC00 ; -//- Alarm
;612686: FD08 CC00 ; -//- SMS
;61269A: 3B   XX   ; Replacement of the sound of
;6126B8: 3B04 XXXX ; Change of the interval of reminders. 043B = 5 seconds. 1 second = 216,57 (decimal), 10 seconds = of 2165,7
;6126BC: 0000 YYYY ; from where we obtain 0x0876 (HEX), consequently value for patcha - 7608

反汇编的结果
                      ADIS16X V3.0 - LOG-File

00050 : DA 91 30 F5       CALLS    Invalid Coding
00054 : D7 40 03 00       Invalid Opcode#03H,#1
00058 : F2 F4 24 3D       MOV      R4,3D24H
0005C : 67 F9 08 00       ANDB     RH4,#0008H
00060 : 3D 1F             JMPR     CC_NZ,00A0H

00062 : DA CF 4A EE       CALLS    Invalid Coding
00066 : 48 40             CMP      R4,#0
00068 : 3D 17             JMPR     CC_NZ,0098H ; to open signal about Notes

0006A : DA C5 08 E4       CALLS    Invalid Coding
0006E : 48 40             CMP      R4,#0
00070 : 3D 13             JMPR     CC_NZ,0098H ; -//- Alarm

00072 : D7 40 56 00       Invalid Opcode#56H
00076 : F3 F2 0E 13       MOVB     RL1,130EH
0007A : 9A F1 05 60       JNB      R1.6,0088H

0007E : DA CC 0A 9C c86ab5      CALLS    Invalid Coding短消息
00082 : 28 41             SUB      R4,#1
00084 : 48 43             CMP      R4,#3
00086 : FD 08             JMPR     CC_ULE,0098H ; -//- SMS

00088 : DA 83 A8 B4       CALLS    Invalid Coding
0008C : 70 45             OR       R4,R5
0008E : 3D 04             JMPR     CC_NZ,0098H
00090 : DA 83 84 B4       CALLS    Invalid Coding
00094 : 70 45             OR       R4,R5
00096 : 2D 04             JMPR     CC_Z,00A0H

00098 : E6 FC 3B 00       MOV      R12,#003BH 选择声音的种类
; Replacement of the sound of
0009C : DA 94 08 91       CALLS    Invalid Coding播放声音函数
000A0 : E6 FC 50 26       MOV      R12,#2650H
000A4 : E6 FD E1 00       MOV      R13,#00E1H
000A8 : 88 D0             MOV      [-R0],R13
000AA : 88 C0             MOV      [-R0],R12
000AC : E0 0E             MOV      R14,#00H
000AE : 88 E0             MOV      [-R0],R14
000B0 : E6 FC F0 03       MOV      R12,#03F0H
000B4 : E0 0D             MOV      R13,#00H
000B6 : E6 FE 3B 04       MOV      R14,#043BH ; Change of the interval of reminders. 043B = 5 second
000BA : E6 FF 00 00       MOV      R15,#0000H
; from where we obtain 0x0876 (HEX), consequently value for patcha - 7608

000BE : DA 92 D6 2E       CALLS    Invalid Coding
000C2 : 08 06             ADD      R0,#6
000C4 : FA 91 3A F5       JMPS     Invalid Coding
000C8 : F7 8E 3A F6       MOVB     0F63AH,ZEROS
000CC : DA 91 30 F5       CALLS    Invalid Coding
000D0 : 0D E7             JMPR     CC_UC,00A0H

首先看一下这个程序,※)×)×)跳转,系统参数太多,看不懂怎么办。。。-_-:L
继续往下看,嗯,老外给的补丁86那句代码有个说明:;612686: FD08 CC00 ; -//- SMS
大意是不运行这句话就能关闭sms未接提醒
抛开前面系统参数,发现程序的中间有好几个步骤十分类似都是:

1:运行一个函数,这里以7e行短消息为例子 call 4C 0A 9C (语句DA CC 0A 9C)
2.对R4的值进行加减
3.比较R4和3是否相等
4.如果相等跳到98语句

联想这个程序共提供了三种未接的提醒,研究另外两个类似的程序块发现,这几个步骤
都是比较R4和某一数值,如果相等就跳到98语句

继续研究下98语句
00098 : E6 FC 3B 00       MOV      R12,#003BH
; Replacement of the sound of
0009C : DA 94 08 91       CALLS    Invalid Coding

发现了没有,9C调用了940891这个函数,这个函数在小2是发声的函数

继续联想,发现每种未接提醒都需要比较R4,而比较前并没有取系统参数值(2128运行内存中临时的数值,比如时间,最新打入的电话号码等。有固定的地址),也就是说很可能R4这个数值是由运行了某个函数而被赋值的,

回过头阅读程序,可以判断在短消息提醒里应该是CC0A9C这个函数

所以大胆假设4C0A9C函数可以读取系统参数,来判断有没有未接短消息

接下来我们可以有两个方法
方法1。在2128里查找和C55里CC0A9C相同的函数
工具可以用sfe,具体方法这里不详细介绍
然后照样画葫芦移植,ok

方法2:猜测终归是猜测,而且就算把三个未接函数的全找到了,咱也不晓得老外
这个程序啥意思,搞不好有啥副作用,所以我们要找到代表未接的系统参数具体地址

步骤:

1.        用sfe找到和C55里4C0A9C相同的函数48B56A
2.        程序不长,汇编下,嗯我看~~~~看。。。。zzzZZZ

48B56A: 28 06       :   sub     r0, #6
48B56C: E0 0C       :   mov     r12, #0
48B56E: C4 C0 02 00 :   mov     [r0+#2], r12
48B572: B8 C0       :   mov     [r0], r12
48B574: C4 C0 04 00 :   mov     [r0+#4], r12
48B578: DA 84 E0 33 :   calls   84h, loc_8433E
48B57C: 48 41       :   cmp     r4, #1
48B57E: 3D 07       :   jmpr    cc_NZ, loc_48B
48B580: E6 00 58 00 :   mov     DPP0, #58h
48B584: E0 1C       :   mov     r12, #1
48B586: F6 FC 30 18 :   mov     mem_161830, r1
48B58A: EA 00 28 B6 :   jmpa    cc_UC, loc_48B
;---------------------------------------------
48B58E: E0 2C       : loc_48B58E:
48B58E: E0 2C       :   mov     r12, #2
48B590: 00 C0       :   add     r12, r0
48B592: 66 FC FF 3F :   and     r12, #3FFFh
48B596: F2 FD 02 FE :   mov     r13, DPP1
48B59A: DA 84 C8 33 :   calls   84h, loc_8433C
48B59E: 48 40       :   cmp     r4, #0
48B5A0: EA 20 28 B6 :   jmpa    cc_Z, loc_48B6
48B5A4: F0 C0       :   mov     r12, r0
48B5A6: 66 FC FF 3F :   and     r12, #3FFFh
48B5AA: F2 FD 02 FE :   mov     r13, DPP1
48B5AE: DA 84 BC 33 :   calls   84h, loc_8433B
48B5B2: 48 40       :   cmp     r4, #0
48B5B4: EA 20 28 B6 :   jmpa    cc_Z, loc_48B6
48B5B8: E0 4C       :   mov     r12, #4
48B5BA: 00 C0       :   add     r12, r0
48B5BC: 66 FC FF 3F :   and     r12, #3FFFh
48B5C0: F2 FD 02 FE :   mov     r13, DPP1
48B5C4: DA 84 D4 33 :   calls   84h, loc_8433D
48B5C8: 48 40       :   cmp     r4, #0
48B5CA: 2D 2E       :   jmpr    cc_Z, loc_48B6
48B5CC: D4 C0 02 00 :   mov     r12, [r0+#2]
48B5D0: 48 C0       :   cmp     r12, #0
48B5D2: FD 06       :   jmpr    cc_ULE, loc_48
48B5D4: E6 00 58 00 :   mov     DPP0, #58h
48B5D8: E0 3D       :   mov     r13, #3
48B5DA: F6 FD 30 18 :   mov     mem_161830, r1
48B5DE: 0D 18       :   jmpr    cc_UC, loc_48B
;---------------------------------------------
48B5E0: A8 C0       : loc_48B5E0:
48B5E0: A8 C0       :   mov     r12, [r0]
48B5E2: 48 C0       :   cmp     r12, #0
48B5E4: FD 06       :   jmpr    cc_ULE, loc_48
48B5E6: E6 00 58 00 :   mov     DPP0, #58h
48B5EA: E0 2D       :   mov     r13, #2
48B5EC: F6 FD 30 18 :   mov     mem_161830, r1
48B5F0: 0D 0F       :   jmpr    cc_UC, loc_48B
;---------------------------------------------
48B5F2: D4 C0 04 00 : loc_48B5F2:
48B5F2: D4 C0 04 00 :   mov     r12, [r0+#4]
48B5F6: 48 C0       :   cmp     r12, #0
48B5F8: FD 06       :   jmpr    cc_ULE, loc_48
48B5FA: E6 00 58 00 :   mov     DPP0, #58h
48B5FE: E0 4D       :   mov     r13, #4
48B600: F6 FD 30 18 :   mov     mem_161830, r1
48B604: 0D 05       :   jmpr    cc_UC, loc_48B
;---------------------------------------------
48B606: E6 00 58 00 : loc_48B606:
48B606: E6 00 58 00 :   mov     DPP0, #58h
48B60A: CC 00       :   nop
48B60C: F6 8E 30 18 :   mov     mem_161830, ZE
48B610: E6 00 58 00 : loc_48B610:
48B610: E6 00 58 00 :   mov     DPP0, #58h
48B614: CC 00       :   nop
48B616: F3 F2 39 18 :   movb    rl1, mem_16183
48B61A: 3D 06       :   jmpr    cc_NZ, loc_48B
48B61C: F2 FC 30 18 :   mov     r12, mem_16183
48B620: 48 C4       :   cmp     r12, #4
48B622: 3D 02       :   jmpr    cc_NZ, loc_48B
48B624: F6 8E 30 18 :   mov     mem_161830, ZE
48B628: E6 00 58 00 : loc_48B628:
48B628: E6 00 58 00 :   mov     DPP0, #58h
48B62C: 08 06       :   add     r0, #6
48B62E: F2 F4 30 18 :   mov     r4, mem_161830
48B632: DB 00       :   rets

3.        其实也蛮长的-_-,看不明白也没关系,我们只所需要的是知道R4是怎么赋值的所以我们从后向前看,看看程序结束前什么把值赋予R4这个变量

4.        倒数第二句,48B62E: F2 F4 30 18 汇编的意思mov     r4, mem_161830

5.        Bingo!这句就提供我们所需要的系统参数地址 161830 ,这句话的意思是将内存的mem
(memery)161830处的值赋值给R4

既然找到了这个系统参数,我们就可以写我们的函数了

举个简单的例子
设一个变量x
将内存161830处值赋值给这个变量x
将x和0作比较(一般0作为假,空无的意思)
如果是0表示没有未接短消息,直接跳转到程序终止函数
如果不是0,跳到发声函数,提醒
如果要隔多少时间提醒一次
无非再加上判断时间的函数

暂告一段落

[ 本帖最后由 fef 于 2005-11-17 16:49 编辑 ]
 楼主| 发表于 2005-11-17 16:43:36 | 显示全部楼层
相关资料
【专题文章】西门子6688Flash修改入门的入门
http://mobile.0110.cn/viewthread ... 1%26filter%3Ddigest
【专题文章】西门子Flash修改入门
http://mobile.0110.cn/viewthread ... 1%26filter%3Ddigest
【教程】补丁基础教程(全文完)
http://mobile.0110.cn/viewthread ... p;highlight=%2Bsolo
[Patch工具]sfe使用详解
http://mobile.0110.cn/viewthread ... 1%26filter%3Ddigest
回复 支持 反对

使用道具 举报

发表于 2005-11-17 17:02:55 | 显示全部楼层
慢慢学习...................要学的太多了......晕
回复 支持 反对

使用道具 举报

发表于 2005-11-17 17:06:56 | 显示全部楼层
老大.....你咱不把补丁弄出来.....叫我看的头晕

                               
登录/注册后可看大图
回复 支持 反对

使用道具 举报

发表于 2005-11-17 17:12:05 | 显示全部楼层
老大,你看看那个解决扩容后短信37死机的么....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-17 18:11:39 | 显示全部楼层
补丁暂时不想贴出来呵呵

其实只要搞懂一个就很顺了

扩容的补丁我没用过,你可以尝试下呵呵
。。。偶懒
回复 支持 反对

使用道具 举报

发表于 2005-11-17 19:56:03 | 显示全部楼层
晕,最近正在想让DX出这个补丁呢。虽然学过单片机,也看过狼大的文章,可还是有很多不懂的,
感觉狼大的入门文章还是不够简明,有些地方需要写的更简单易懂些。
继续学习
回复 支持 反对

使用道具 举报

发表于 2005-11-18 06:01:15 | 显示全部楼层
我只能支持了
回复 支持 反对

使用道具 举报

发表于 2005-11-18 08:27:26 | 显示全部楼层
原帖由 fef 于 2005-11-17 18:11 发表
补丁暂时不想贴出来呵呵

其实只要搞懂一个就很顺了

扩容的补丁我没用过,你可以尝试下呵呵
。。。偶懒

老大弄得人心里痒痒~~~~~~
回复 支持 反对

使用道具 举报

发表于 2005-11-18 14:54:53 | 显示全部楼层
老大哦,我用ADIS16X反汇编出来的和你的怎么不一样,是不是简单讲一下ADIS16X的用法。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-18 16:15:02 | 显示全部楼层
对于补丁这种格式,你用sfe编译会方便多
ADIS16X只能编译bin文件

[Patch工具]sfe使用详解
http://mobile.0110.cn/viewthread.ph ... 1%26filter%3Ddigest
回复 支持 反对

使用道具 举报

发表于 2005-11-18 16:33:48 | 显示全部楼层
老大~~~~~~~~
我哭了半天~~~~~~~

解决扩容问题的补丁太好了~~~~~~~~~~~~~~~~~~~~~~~~~~~~··
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-21 12:13:31 | 显示全部楼层
客气客气呵呵
回复 支持 反对

使用道具 举报

发表于 2005-11-21 13:49:17 | 显示全部楼层
呵呵,很怀念吖。。。。几个月前重装系统忘了备份,所有反汇编数据和fullflash文件都格了,之后再没研究过补丁。。。。现在想找回C55、3618等的flash文件都难了。。。。
支持fef兄重掁小2昔日辉煌。。。。
回复 支持 反对

使用道具 举报

发表于 2005-11-21 18:21:33 | 显示全部楼层
C55,3618,6688的flash我都有收藏。。。不过我现在是没时间再去移植补丁了。。。郁闷。。。
都已经大三了,还是这么迷茫……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 19:07

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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