爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
楼主: MrJewes
收起左侧

【专题文章】西门子6688Flash修改入门的入门

[复制链接]
发表于 2005-8-10 00:40:00 | 显示全部楼层
经典啊..好帖能不顶么..
虽然对电脑有点研究(俺是做二手电脑这生意的).但对C语言却不怎么懂啊.看来要为小8做点贡献还的从零开始啊..
 楼主| 发表于 2005-8-10 00:41:00 | 显示全部楼层
以下是引用虾兵....在2004-1-1 18:29:11的发言:
[quote]以下是引用smartjill在2004-1-1 9:57:46的发言:
汗ing。。。。幸好C和汇编我都学过一些,算是知道程序是怎么实现的。
  不过反汇编我就玩了,(毕竟不是计算机专业,俺是工科出身)

  比如这一行:ROM:BF0BD0        cmp     r2, #0

  BF0BD0  是如何和  cmp    r2, #0  联系起来的?(如何对应?)
  或者说,我写出了cmp    r2, #0,怎样将其变为可执行的代码?

你说的ROM:BF0BD0        是地址,在这个地址处有一句cmp r2,#0的指令.

我也是工科的,不知道你有没有学过,我想那些指令就是通过一种编码编成机器语言,就是我们看到的vkp内容的那种形式,而我们要做的就是把这些vkp形式的东西解码成汇编语言,这样才能修改.

这是我目前的理解,不知道对不对,请指正!!
[/quote]

对,CPU只认识机器语言,就是01代码,我们把这些写成了16进制数,就是在Vkp里面看到的内容,反汇编就是把这些数变成汇编语言,就是在IDA里面看到的东西,我们也是在这些内容基础上,理解,然后修改,然后再作成16进制数的格式(vkp),把汇编语言变成机器代码的过程就是汇编,这种汇编规则,每个CPU的都不同。都是有工具可以作到的,小8 的CPU可以用C166 Compiler来汇编简单的代码,如果比较复杂的可以看看狼大的《用UltraEdit搭建小8开发平台》------可以说是小8修改历史上工具的一次大变革!
发表于 2005-8-10 00:42:00 | 显示全部楼层
狼大的《用UltraEdit搭建小8开发平台》哪里能找到?
发表于 2005-8-10 00:43:00 | 显示全部楼层
佩服
不服不行
发表于 2005-8-10 00:44:00 | 显示全部楼层
有心而无力啊······
发表于 2005-8-10 00:45:00 | 显示全部楼层
考试完好好看看。。。。
发表于 2005-8-10 00:46:00 | 显示全部楼层
大家都来学习吧!
发表于 2005-8-10 00:47:00 | 显示全部楼层
顶呀!
发表于 2005-8-10 00:48:00 | 显示全部楼层
好,我会尝试入门的,呵呵
发表于 2005-8-10 00:49:00 | 显示全部楼层



不是我不明白!
发表于 2005-8-10 00:50:00 | 显示全部楼层
我再结合实际地补丁来简单的注解下MrJewes所举的整点报时的例子:

整点报时功能
;适用版本: 6688 v55
;作者:RizaPN
;移植:huajia
;此修改将提供整点报时的功能。
;注意:此修改和coollang的在12/24时制间选择的功能有冲突,不可同时刷。

0x3637CC: 26F00C00 DABFC00B

0x1F0BC0: FFFFFFFFFFFFFFFF D7500D00F3F8A424
0x1F0BC8: FFFFFFFFFFFFFFFF F2F2DC258AF41240
0x1F0BD0: FFFFFFFFFFFFFFFF 48203D0BD7401100
0x1F0BD8: FFFFFFFFFFFFFFFF F3F8403849813D0A
0x1F0BE0: FFFFFFFFFFFFFFFF E01CDAB5A4D2E004
0x1F0BE8: FFFFFFFFFFFFFFFF 0D01E014D7401100
0x1F0BF0: FFFFFFFFFFFFFFFF F7F8403826F00C00
0x1F0BF8: FFFF DB00

;通过设置情景模式配置文件 3(倒数第二项)的震动器来控制整点报时的开关。
;震动器->关,则报时功能打开。
;报时声音可通过修改地址0x1F0BE1来实现。
;方式如下:
;0x1F0BE1: FF 1C (tut-tut-tut声)
;0x1F0BE1: FF 2C (高的titi声)
;0x1F0BE1: FF 3C (电池无电关机警告声)


其实这个例子的实现原理是,在小8待机时和通话状态处理图标时,顺便处理下自己新加入的部分功能。

实现方法是:

一、先要知道处理图标函数的入口,也就是地址D637C8(换成我们常用的格式就是D637C8-

A00000=3637C8)处的代码。其实D637CC和3637CC是等价的,只不过对应的对象不同才有

不同的表现,可看相关资料。

二、修改D637C8(3637C8)处开始的代码为一个跳转功能,这样当小8执行到处理图标函数时

会被我们加入的跳转代码引到我们新加的代码处执行。

实际上的补丁是把这个跳转加在(D637CC)3637CC处,为什么不是D637C8(3637C8)处

呢?其实要是你接触过用汇编编地函数就会明白,一般来说,在一个函数地刚开始部分都是入

栈指令用以保护即将被函数使用地寄存器地内容或是给函数地临时变量留点地方,

如类似这样的代码(注意是类似,我没实际研究过):
mov     [-r0], r9
mov     [-r0], r8  //保存寄存器

这样我们的跳转代码就可以适当的插在这些代码的后面点以免作重复的工作,至于插在后面多

少的位子,那就要看这些入栈指令代码的实际长度了,一般来说当你能动手写代码时,你也应

该能知道什么是适当的插入点啦,如例子中的(D637CC)3637CC。知道这个插入点后,在这

个位子直接加入我们要的跳转代码:CALL XXXXX,CALL的原代码是DA,XXXXX就是我们找到的

没有用的空间的地址(0x1F0BC0)你也可以改到你认为合适的FREE空间地址,这样代码的最

后表现形式就是 0x3637CC: 26F00C00 DA (这里使用地址0x1F0BC0时要转换一

下),注意这里我们破坏了他的原有的代码26F00C00,后面在我们自己加的代码里面要记得补

回也就是,MrJewes所举的整点报时的例子里的:

sub     r0, #0Ch//因为我们占用了刚才那条指令,所以要补回来

当调到我们自己加的代码地址时,我们下面再该作什么呢?

MrJewes已经注解的很清楚了,要是你还是不懂,那我就再罗嗦下:

先取得情景模式配置文件3里的数据,看是否震动器被选中,如果没有选中则直接跳到出口loc_BF0BF4处:

ROM:BF0BF4 loc_BF0BF4:                             
ROM:BF0BF4                 sub     r0, #0Ch//因为我们占用了刚才那条指令,所以要补回来
ROM:BF0BF8                 rets

反之,就是具体的实现整点报时的功能了。

要完成实际可用的补丁时注意几点的是:
一、我们加的代码必须要放在FREE地址处。
二、地址的转换,如D637CC转换为3637CC,1F0BC0转换为BFC00B(如果手工改动的话)
三、入口保护,如:
mov     [-r0], r9
mov     [-r0], r8  //保存寄存器

四、功能实现:
ROM:BF0BC0        extp    #0Dh, #2
..................................................
.....
ROM:BF0BEC                 extp    #11h, #1
ROM:BF0BF0                 movb    byte_47840, rl4
......

五、恢复现场并返回:
ROM:BF0BF4 loc_BF0BF4:                             
ROM:BF0BF4                 sub     r0, #0Ch//因为我们占用了刚才那条指令,所以要补回来
ROM:BF0BF8                 rets

说这么多,其实我还没实际写过小8补丁,主要是以前写汇编留下的点经验,不对之处,见谅。
发表于 2005-8-10 00:51:00 | 显示全部楼层
各个函数的入口地址是什么?怎样知道某段函数的功能?“站在巨人肩膀上”是什么意思?
 楼主| 发表于 2005-8-10 00:52:00 | 显示全部楼层
以下是引用Eternity在2004-1-4 3:16:01的发言:
各个函数的入口地址是什么?怎样知道某段函数的功能?“站在巨人肩膀上”是什么意思?

怎样知道函数的功能,这个只有经过分析和猜测,试验才能知道!

“站在巨人肩膀上”是什么意思?----Mr 牛顿说的!
发表于 2005-8-10 00:53:00 | 显示全部楼层
以下是引用MrJewes在2004-1-4 13:13:14的发言:
[quote]以下是引用Eternity在2004-1-4 3:16:01的发言:
各个函数的入口地址是什么?怎样知道某段函数的功能?“站在巨人肩膀上”是什么意思?

怎样知道函数的功能,这个只有经过分析和猜测,试验才能知道!

“站在巨人肩膀上”是什么意思?----Mr 牛顿说的!
[/quote]

怎样进行分析和猜测?有没有别人总结出来的经验?
对着这么多类似的汇编码,实在是无从下手啊。
发表于 2005-8-10 00:54:00 | 显示全部楼层
我要好好学习,天天向上!
发表于 2005-8-10 00:55:00 | 显示全部楼层
太好了。
发表于 2005-8-10 00:56:00 | 显示全部楼层
实在是太好了,我实在是太想学了!就是一点都不懂了.....................
发表于 2005-8-10 00:57:00 | 显示全部楼层
3618的rAm是多少?348k?谢谢
发表于 2005-8-10 00:58:00 | 显示全部楼层
能不能提供反汇编工具下载(包括注册码),感谢
 楼主| 发表于 2005-8-10 00:59:00 | 显示全部楼层
@NONO
在置顶的帖子里面有,仔细找一下!
您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

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

GMT+8, 2024-5-30 15:33

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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