爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 4037|回复: 13
收起左侧

补丁写法的疑问,希望帮忙~~

[复制链接]
发表于 2005-10-8 08:47:00 | 显示全部楼层 |阅读模式

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

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

x
一直很有疑问,补丁是先用汇编语言写成然后编译的吗?
像这样的补丁0x7BE454: 06F00A00 FABF00FC
0x9FFC00: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 06F00A00ECF1ECF2ECF3A810D4300600

是怎么达到这种效果的了,0x7BE454,这个地址是在用汇编写的时候加入的吗?怎么加入的了?

或者是本来就用这种方式写的,然后用反汇编成汇编语言。哪位大哥可以讲讲具体的做法,例如:一个补丁用什么语言写好,然后要用什么软件编译,以及编译的软件的环境如何设置?
在网上看了一些文章,还是很模糊,不知道怎么下手?
很感兴趣,希望哪位高手指点阿!!
谢谢~~
发表于 2005-10-8 20:24:28 | 显示全部楼层
鼓励!

之前在Z头等高人的帮助下研究过一段时间,后来没什么时间就放下了,做补丁几乎都要用上IDA FOR C166,要看懂程序,还要备上一份C166指令手册,要先用IDA进行反编译,应该多数补丁都是用汇编写的吧,但之前也看到Z头提到用C来写,象0x7BE454这个地址应该是某个功能调用的地址,或者在其他地方做了跳转过来的,通常这个地址的程序是用做定位主程序的地址的

更高级的可以翻看以前的帖子或者继续向高人们请教吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-9 16:16:52 | 显示全部楼层
呵呵~~谢谢鼓励~~

我以前学习过c语言,没有学过汇编语言,补丁都是用汇编语言写,象0x7BE454这种地址是把汇编语言编译成如上形式的时候再 转换的吗?

还是大多数的补丁都是移植过来的~
一直想找一篇简单的教程看看,最好是从头到尾有详细的过程,在论坛里也找了一些看看,感觉不太基础
还是有点模糊~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-10 11:19:46 | 显示全部楼层
找了很久,找不到合适的IDA FOR C166和C166指令手册
哪位可以提供一下 ~
谢谢~~急用

我的邮箱:wrdzz@126.com
回复 支持 反对

使用道具 举报

发表于 2005-10-10 21:36:31 | 显示全部楼层
C166使用于6688,55系列等手机,65及65以后的都不适用了.
65采用了ARM处理器,汇编指令集都不一样,也更加复杂.
C166是16位的,65采用的是32位的处理器,所以速度比以前有很大提高.
回复 支持 反对

使用道具 举报

发表于 2005-10-10 21:39:40 | 显示全部楼层
原帖由 wangjihua_s57 于 2005-10-10 11:19 发表
找了很久,找不到合适的IDA FOR C166和C166指令手册
哪位可以提供一下 ~
谢谢~~急用

我的邮箱:wrdzz@126.com


SPGC有ftp应该有,自己去找吧
回复 支持 反对

使用道具 举报

发表于 2005-10-11 20:09:48 | 显示全部楼层
我以前的FTP因为条件所限,现在已经暂停使用了,希望以后有机会能够重开

昨晚已经发到你的邮箱,查收!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-12 11:21:47 | 显示全部楼层
原帖由 beyond 于 2005-10-10 21:36 发表
C166使用于6688,55系列等手机,65及65以后的都不适用了.
65采用了ARM处理器,汇编指令集都不一样,也更加复杂.
C166是16位的,65采用的是32位的处理器,所以速度比以前有很大提高.



我现在一直用m55,一直就是打别人写的补丁
就想自己研究研究,搞明白

先把m55搞明白再考虑其它的
呵呵~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-12 11:23:30 | 显示全部楼层
原帖由 zxczxc 于 2005-10-11 20:09 发表
我以前的FTP因为条件所限,现在已经暂停使用了,希望以后有机会能够重开

昨晚已经发到你的邮箱,查收!



已经收到,非常感谢~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-12 11:24:45 | 显示全部楼层
先再研究研究,不明白再问
呵呵~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-13 08:47:40 | 显示全部楼层
一直很不明白的一个问题,请教

如下这样一个补丁:
自动开机_V2

;适用:S57Cv18
;作者:RainMoon
;移植:Eternity@pku
;版本:v2
;时间:2004-02-15
;说明:自动开机V2
;关机后第一个激活的重要记事时间到时开机,不闹铃
;
311ee6: dad75e3b fa71561f

补丁是用汇编写成的吗?如果是用汇编,dad75e3b fa71561f这两条是调用和跳转指令,但是怎么实现在
311ee6这个地址上完成这个功能了?一直很疑惑,就是用汇编写的补丁怎么调用地址的问题。
如果不是用汇编写的,直接写这样简单的补丁还可以,知道入口地址和函数地址就可以了,但是一段很复杂的指令我自我感觉直接写就很有难度了,哪 位 大哥能不能就 一个简单的补丁详细叙述一下的写 补丁,编译不定的全过程,或在线指点,请PM我,谢谢了,呵呵~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-19 10:28:11 | 显示全部楼层
没有人帮忙吗??
回复 支持 反对

使用道具 举报

发表于 2005-10-19 11:16:43 | 显示全部楼层
很高兴看到有人喜欢去研究补丁的写法。
这方面可以到SPGC版块去看看以前COOLLANG老大的新手入门文章,
你所说的那些我来对付着先解答一下吧。
是的,补丁是用汇编来写的,是基于C166的汇编,不过和8086/8088的汇编很接近,如果你有汇编的基础是很容易看得懂的。而补丁是由汇编再转成C166CPU所能识别的机器码(也许还要再经VK转一下)。这和8086上转成了BIN是有点类似的。
对于开发补丁的工具,你可以到SPGC那里去找找COOLLANG给出的SFE使用教程。当然还有别的工具,但我个人觉得还是SFE好用,小而精。
一般来说写补丁都是有汇编写好,然后用SFE汇编后就生成补丁的形式了,然后再刷到机子上就OK了。这其中的关键是:1。入口得自己找或是别人补丁中有用到的。2。有个好点子,好的想法,然后用汇编实现一下。其实难点是在于在了解入口的基础上有个好的点子。
以我开发的来电49/50/60秒提示为例。
首先,我知道了来电会经过的一些地址,其实这是因为当时我搞接通振动不小心发现的。这样我就得到了入口地址,然后在发现了我们X55在来电时是不会有提示音的。那么这个补丁有就开发的必要了。
那么我在我的代码中当然是会有如下的流程:判断是否来电?如果不是就放行,如果是就判断是否是在所需要的时间点上?这一步是有个算法的,其实我是照抄了原机上去电的算法,然后就是在时间点上发音,这个在之前的一个补丁中(应当是去掉提示框那个补丁中有用到),这样很容易一个补丁就开发完了。看看当时我的源代码吧。如下:
;MC60 来电提示音源代码.
;飞飞猪
;mc60 v07
;05.5.27
#define Patch_org_addr  0x552910h   ;补丁开始地址
#define Md  00fe0eh        ;乘法寄存器.
#define MdL 00fe0ch        ;低位.
#define Dididi  0a1ec94h    ;发音CALL
#define de_CA   0B56Ee0h    ;原位置的CALL,也就是入口所在.

org Patch_org_addr
;calls patchbegin       ;只是处理一下,恢复入口.
;calls de_CA
;rets

;patchbegin:
mov [-r0],r12
mov [-r0],r4
extp #7,#1
mov r12,003c02H  ;如果此地址如[非6]就是打进.
cmp r12,#6
jmpr cc_Nz,Aaaaa                    ;否--跳去处理.

mov r4,[r0+]
mov r12,[r0+]
rets

Aaaaa:
extp #7, #1
mov r4,33deh  ;取得通话时长
                ;分离出秒.
mov r12,#3ch   ;60
mov Md,r4
atomic #2
divu r12
nop

calls Bbbb        ;处理秒值在49/50/60的情况.
jmpr   cc_Z  Cccc
mov r4,[r0+]
mov r12,[r0+]            ;如果不是指定时间点时什么也不做.
rets

Cccc:           ;如果是指定的时间点,那么跳到这里来发声.
mov r12,#13h    ;R12的值决定声音.可修改.
calls Dididi            ;DAa194ec
mov r4,[r0+]
mov r12,[r0+]
rets

Bbbb:            ;是否是在49/50/60秒?
mov r4,MdL
cmp r4,#30h
jmpr cc_z Ddd
cmp r4,#31h
jmpr cc_z Ddd
cmp r4,#3bh
Ddd:
rets
然后用SFE来汇编一下,再加上入口一个补丁就出来了。而关于一些其它的补丁中入口如何找到,COOLANG有个帖子说到,但是对于我来说似乎是太难了点。也就是说真正做一个从无到有完全是自己搞出来的东西,由于我们对机子的了解并不太多,我个人觉得真是太难了。
回复 支持 反对

使用道具 举报

发表于 2005-10-19 11:29:01 | 显示全部楼层
我之前学的是PACAL,所以对C更感兴趣,在C166上用C来写怕是不太容易实现,如果能用C来写自然是好事,至少写起来更容易一些,光是保存寄存器这一项对于用汇编来写都是件大大的麻烦事了。我所知道的是X65那些基于ARM的CPU是可以用C来写,看起来开发的工作会更有乐趣一些。然而这西门子都顶不住了,以后是否转到ARM上去玩玩那都是很难说了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-25 07:50

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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