爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 532|回复: 17
收起左侧

[9(12)宫] 补丁的基础知识

[复制链接]
发表于 2006-11-3 09:51:21 | 显示全部楼层 |阅读模式

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

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

x
我跟周围的人说到“补丁”的这个词的时候,他们大多数的反映是“补丁是什么?有什么用??手机也要打补丁么?”,其实在这个论坛上怀有这个疑问的应该也有吧,那我们先来说一下什么是补丁。

     很难给补丁下一个完整的定义,什么是补丁?我想:

     改善手机功能,使我们的爱机能够更好的为我们服务的代码段就可以称之为“补丁”。

     

可能有的人会问,那些代码是表示什么意思呢?怎么使用这些呢?这个就是对 V_klay的格式搞不清楚了,我们先从一个简单的例子来讲解一些相关的知识。

例 1:2128的#键快捷方式的修改

说明: #键加右软键由“读小区广播”到“未接来电”

4a7c50:DAc110cf DAcaf49d;功能函数入口地址     

    4a77f0:7502 a400;字串ID

   

这个可以说是一个标准的补丁,先来说一说他的结构:

例如在这个补丁中的第二行是 4a7c50 : DAc110cf   DAcaf49d ;函数 ,这一行的结构 分为以下四个部分:

①: 4a7c50 :     要写入补丁的地址, 说明补丁要修改的地方是在手机内存的 4a7c50这个位置,相当于手机内存单元的门牌号码,以冒号结束,这是固定的格式。

②: DAc110cf     旧数据,相当于以前在 4a7c50这个屋里住的良好市民。

③: DAcaf49d      新数据,相当于把 dac110cf赶出家门自己住进去的恐怖分子。 ^_^

④:大家一定注意到了补丁代码的后面常常跟有文字,这些也是补丁所必须的么?当然不是! ";"(英文的分号)   后面是注释的内容,是为了说明补丁的作用,对补丁的功能是没有影响的。

再来解释一下这个补丁的功能是如何实现的 :这个补丁的意思是要实现把待机时的 #键的功能由原来的“读小区广播”变成“未接来电”。

大家可能注意到了,在每个功能函数前都有 DA这两个字母,他的意思就是call,意思是叫他后面跟的这个地址上的函数出来工作。

所谓函数入口地址,也就是 c110cf和caf49d,也是手机内存里的门牌号码,分别住的是实现“读小区广播”和“未接来电”这个功能的程序模块。为什么是的,我们不管它,好用就行。

当 V_klay执行完“4a7c50:dac110cf daCAF49d”这一句之后,我们手机上的#键的功能就已经变成“未接来电”了,但是当你按下#键,你会发现在右软键上的还是 “读 CB”这几个字。所以需要找到这几个字住的地方,把他们赶出去,换上“未接来电”这几个字住进去。

在这个补丁里: 7502表示的就是在屏幕上显示“ 读 CB ”这几个字,而 4a77f0就是“ 读 CB” 在手机内存里的地址, a400则表示恐怖分子啦 ^_^

这个补丁可以按自己的需要定制,只需要你把新数据的函数入口地址和字串 ID换成你需要的功能,相关的函数地址和字串可以看“2128补丁汇总”。比如下面这个就是把#键换成”转移设定”。   

   4a77f0:7502 f001;字串ID

   4a7c50:DAc110cf DAcaced3;函数

看到这里,你是不是已经有点明白了?补丁还有一种常见格式,我举下面这个例子说明

例 2:3118的 直接发送免提短信
;作者:RizaPN   &   coollang
;适用:3118V17
;说明:直接发送免提短信,用法是在短信前加一个空格!
;此修改完全符合GSM规范,如果对方手机不能免提显示,则是对方不能完全支持规范。
0x395994:   E6FCA011   DAC000E7                                                     0x20E700:   FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF   88808890EC00E6005800F3F8E5103D0A
0x20E710:   FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF   F3F2F31067F25F003D25E7F2F000F7F2
0x20E720:   FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF   E5100D2047F808003D1DF3F2F310F3F3
0x20E730:   FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF   F41046F100203D16E7F21800F7F2E510
0x20E740:   FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF   F3F2F1102D0F2922F7F2F110C02F88F0
0x20E750:   FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF   E6FCF310E6FD5800E6FEF510F0FDDAFE
0x20E760:   FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF   ECAD0802FC0098909880E6FCA011DB00

看到有什么不同了么?

①:地址前面多了 0x(注意,是“零”x,而不是“欧”x),不管他,对补丁没有影响。是可要可不要的。

②:除了第一行以外,旧数据全部都是 FFFFFFFF……,那问题就来了:

1> 这些 F究竟代表什么呢? 2>怎么会有这种结构呢? 3>这种结构究竟是什么意思呢?

下面我来一个一个地说:

1:这些FFFFF实际上就是手机里空白的地方,这些地方没有被西门子公司写上实现手机功能的代码,而是完全空白的,就像没有开垦的处女地一样。

2:像这样一类的补丁就是利用了手机里的空白地址,在这里写上自己的代码,实现自己想要的功能。

3:这个就是关键了,其实原理很简单,你把自己的代码写好了,也刷进去了,但是和西门子的常规程序没有联系怎么实现自己想要的功能呢?第一行就是起这种连接作用,他衔接了手机的常规程序和补丁程序。大家在第一行的新数据里是不是又看到了DA这个字节,也就是call,在call后面跟的肯定是地址,而且是补丁第二行的地址,但是“C000E7”这个地址并没有在下面的补丁中出现,这是怎么回事呢?

到这里也不得不讲一点比较难懂的东西了。

因为西门子用的是 C166的处理器芯片, 寻址空间 和 pc机上的 286一个等级),为16M,所以在手机内部是用统一的16M地址来处理Flash的。2128的FLASH只有8M,而3118的FLASH是6M,所以有如下公式 :

2128:FlashAddress = FileAddress + 0x800000。而0x800000 = 8M。就是说在FLASH的前面填上8M的空间来进行16M寻址。

3118:FlashAddress = FileAddress + 0xA00000。而0xA00000 = 10M。

例如例 2中的 DAC000E7 这个指令,DA表示CALLS函数调用。而 C000E7 则是被调函数的地址,其中C0是段地址(seg),而E700则是段内偏移量。 注意,是 E700而不是00E7。那这个地址就是所谓的 FlashAddress,而转换成相对应的文件地址(FileAddress),就是 20E700,大家看出什么规律了么?

C = 12,A = 10,C - A = 2

就这么简单,大家可以把 2128的免提短信算一算 看看是不是和结论符合。

最后说一下补丁的返回,一个补丁实现完他的功能后不能老是占着 CPU的资源啊,所以要返回原来调用它的地方的下一句继续运行手机的常规程序,这就用到了返回语句。

大家可以看到在例 2最后一行的最后4个字母,是DB00,DB的反汇编就是rets,作用是返回调用的地方,在这个补丁里就是返回到常规程序中395994的下一句。而00是结束符,表明这个代码段已经结束。

讲到这里,大家应该对补丁的运行过程有一个大概的了解了吧
发表于 2006-11-3 09:58:38 | 显示全部楼层
沙发?呵呵 谢谢了
收藏
回复 支持 反对

使用道具 举报

发表于 2006-11-3 10:06:07 | 显示全部楼层
哈...这个不错...

还有很多要学啊
回复 支持 反对

使用道具 举报

发表于 2006-11-3 10:06:47 | 显示全部楼层
我来拿脱盲证!
回复 支持 反对

使用道具 举报

发表于 2006-11-3 13:04:13 | 显示全部楼层
不错!有见地啊!支持一下!
回复 支持 反对

使用道具 举报

发表于 2006-11-3 14:02:58 | 显示全部楼层
谢谢分享......
回复 支持 反对

使用道具 举报

发表于 2006-11-3 14:10:01 | 显示全部楼层
不错啊!!!支持一下!!!
回复 支持 反对

使用道具 举报

发表于 2006-11-3 16:29:03 | 显示全部楼层
厉害,厉害,可惜我的功力不够,找LZ多学习学习!!!!!
回复 支持 反对

使用道具 举报

发表于 2006-11-3 22:33:54 | 显示全部楼层
楼主好贴,新人多学习
回复 支持 反对

使用道具 举报

发表于 2006-11-3 22:49:54 | 显示全部楼层
又是一个出口转内销
这个是本论坛的Solo写的
回复 支持 反对

使用道具 举报

发表于 2006-11-3 22:50:28 | 显示全部楼层
我是 来学习学习的``
回复 支持 反对

使用道具 举报

发表于 2006-11-4 05:31:48 | 显示全部楼层
我是 来学习学习的
回复 支持 反对

使用道具 举报

发表于 2006-11-4 05:33:17 | 显示全部楼层
我是 来学习学习的
回复 支持 反对

使用道具 举报

发表于 2006-11-4 08:17:37 | 显示全部楼层
学习到了:)
回复 支持 反对

使用道具 举报

发表于 2006-11-4 11:46:18 | 显示全部楼层
学习了....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-6 16:13:43 | 显示全部楼层
原帖由 beyond 于 2006-11-3 22:49 发表
又是一个出口转内销
这个是本论坛的Solo写的


转过来大家学习嘛
回复 支持 反对

使用道具 举报

发表于 2006-11-25 00:19:35 | 显示全部楼层
好贴     啊
回复 支持 反对

使用道具 举报

发表于 2006-11-25 02:58:19 | 显示全部楼层
感谢搂主的启蒙,辛苦了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-26 11:27

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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