爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
楼主: foxcon
收起左侧

[汉化] PetFish(3D宠物鱼)V1.0a 汉化修改版

[复制链接]
发表于 2005-10-17 14:28:04 | 显示全部楼层
抓图呀??好麻烦的。回家试试。
回复 支持 反对

使用道具 举报

发表于 2005-10-17 16:34:57 | 显示全部楼层
我已经搞定完美版了,foxcon 的改法是碰巧撞上了而已,哈哈。

我反汇编之后改了内核算法,实现了完美存档,等我晚上整理一下发上来吧,现在比较忙...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-17 19:13:54 | 显示全部楼层
原帖由 小毛 于 2005-10-17 16:34 发表
我已经搞定完美版了,foxcon 的改法是碰巧撞上了而已,哈哈。

我反汇编之后改了内核算法,实现了完美存档,等我晚上整理一下发上来吧,现在比较忙...



顶啊,Very期待~~~!至于我那个,真是:$
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-17 19:16:35 | 显示全部楼层
毛毛阿,能不能写个教程,让我也进步一下啊~~!
回复 支持 反对

使用道具 举报

发表于 2005-10-18 09:28:12 | 显示全部楼层
感谢小毛期待完美版
回复 支持 反对

使用道具 举报

发表于 2005-10-18 11:56:29 | 显示全部楼层
PetFish修正教程:

PetFish存在存档问题,原版会将进度存档存入C:\petfish.sav中,但是读取存档却从程序安装目录下读取,比如E:\system\apps\PetFish\petfish.sav。这样就造成了每次读取进度都会失败的问题。

用UE打开PetFish.app,找到PetFish.sav,尝试改为E:\Fish.sav,运行结果是存档的确存入了E:\Fish.sav,但是依然不能正确读取。

于是再次修改,将E:\system\apps\petfish\petfish.sav。这样修改由于原本字节空间不足,所以需要从其他资源的地方借用一部分字节,并且注意将头四个字节的0B修改成21,即资源扩张后的有效长度。
按道理说,如果将这里修改了,存档文件直接写入安装目录,读取的时候就应该可以了,可是试验的结果很令人沮丧...在读取进度的时候程序会报错。

看来简单的用UE修改解决不了这个问题,于是用IDA反编译petfish.app,从代码内核进行分析。

首先找到petfish.sav的资源地址:

.text:10026E70 dword_10026E70  DCD 0xB, 0x650050, 0x660074, 0x730069, 0x2E0068, 0x610073
.text:10026E70                                         ; DATA XREF: sub_10009338:off_10009414o
.text:10026E70                                         ; .text:off_1000A884o

因为是UNICODE,这里没有直接解析成String,你可以对此段Undefine,就可以看到内容。

这个资源被两次调用,先看 DATA XREF: sub_10009338:off_10009414o

text:100093B4                 MOV     R0, #0x174
.text:100093B8                 BL      NewL__6HBufC8i  ; HBufC8::NewL(int)
.text:100093BC                 MOV     R6, R0
.text:100093C0                 ADD     R0, SP, #0x328+var_120
.text:100093C4                 MOV     R1, #0x80
.text:100093C8                 BL      __10TBufBase16i
.text:100093CC                 MOV     R4, SP         
.text:100093D0                 MOV     R0, R4
.text:100093D4                 LDR     R1, =dword_10026E70    ;这里是PetFish.sav调用
.text:100093D8                 BL      sub_1000E25C
.text:100093DC                 ADD     R0, SP, #0x328+var_120
.text:100093E0                 MOV     R1, R4         
.text:100093E4                 BL      Copy__6TDes16RC7TDesC16
.text:100093E8                 MOV     R0, R6
.text:100093EC                 ADD     R1, SP, #0x328+var_120
.text:100093F0                 BL      sub_1000DD8C
.text:100093F4                 CMP     R0, #0
.text:100093F8                 BEQ     loc_10009418
.text:100093FC                 MOV     R0, R6
.text:10009400                 BL      Ptr__C6TDesC8   ; TDesC8::Ptr(void)
.text:10009404                 MOV     R1, R0
.text:10009408                 MOV     R0, R5
.text:1000940C                 BL      sub_10009234
.text:10009410                 B       loc_10009420

这段代码的大致含义是将PetFish.sav与sub_1000E25C调用得到的内容进行拼接。然后调用 sub_1000DD8C及其后的代码。
我们先看看sub_1000E25C是什么:
STMFD   SP!, {R4-R7,LR}
.text:1000E260                 SUB     SP, SP, #0x420
.text:1000E264                 SUB     SP, SP, #8
.text:1000E268                 MOV     R7, R0
.text:1000E26C                 MOV     R6, R1
.text:1000E270                 ADD     R5, SP, #0x43C+var_234
.text:1000E274                 MOV     R0, R5
.text:1000E278                 BL      __6TParse
.text:1000E27C                 MOV     R4, SP
.text:1000E280                 MOV     R0, R4
.text:1000E284                 BL      sub_1000E1F4
.text:1000E288                 MOV     R0, R5
.text:1000E28C                 MOV     R1, R4
.text:1000E290                 MOV     R2, R6
.text:1000E294                 MOV     R3, #0
.text:1000E298                 BL      Set__6TParseRC7TDesC16PC7TDesC16T2 ; TParse::Set(TDesC16 const &,TDesC16 const *,TDesC16 const *)
.text:1000E29C                 MOV     R0, R5
.text:1000E2A0                 BL      FullName__C10TParseBase ; TParseBase::FullName(void)
.text:1000E2A4                 MOV     R1, R0
.text:1000E2A8                 MOV     R0, R7
.text:1000E2AC                 MOV     R2, #0x100
.text:1000E2B0                 BL      __10TBufBase16RC7TDesC16i
.text:1000E2B4                 MOV     R0, R7
.text:1000E2B8                 ADD     SP, SP, #0x28
.text:1000E2BC                 ADD     SP, SP, #0x400
.text:1000E2C0                 LDMFD   SP!, {R4-R7,LR}
.text:1000E2C4                 BX      LR

很显然,这段代码是用来得到程序运行的当前路径。
那么拼接的结果就是 当前路径+petfish.sav。

再看 sub_1000DD8C

.text:1000DD8C                 STMFD   SP!, {R4-R8,LR}
.text:1000DD90                 SUB     SP, SP, #0x2C
.text:1000DD94                 MOV     R8, R0
.text:1000DD98                 MOV     R6, R1
.text:1000DD9C                 ADD     R4, SP, #0x44+var_28
.text:1000DDA0                 MOV     R7, #0
.text:1000DDA4                 STR     R7, [SP,#0x44+var_28]
.text:1000DDA8                 ADD     R5, SP, #0x44+var_30
.text:1000DDAC                 STR     R7, [SP,#0x44+var_30]
.text:1000DDB0                 STR     R7, [R5,#4]
.text:1000DDB4                 MOV     R0, R4
.text:1000DDB8                 MOV     R1, #4
.text:1000DDBC                 BL      Connect__3RFsi  ; RFs::Connect(int)
.text:1000DDC0                 BL      LeaveIfError__4Useri ; User::LeaveIfError(int)
.text:1000DDC4                 LDR     R3, =loc_10026604
.text:1000DDC8                 STR     R3, [SP,#0x44+var_38]
.text:1000DDCC                 STR     R4, [SP,#0x44+var_34]
.text:1000DDD0                 ADD     R3, SP, #0x44+var_38
.text:1000DDD4                 LDMIA   R3, {R0,R1}
.text:1000DDD8                 BL      PushL__12CleanupStackG12TCleanupItem ; CleanupStack::PushL(TCleanupItem)
.text:1000DDDC                 MOV     R0, R5
.text:1000DDE0                 MOV     R1, R4
.text:1000DDE4                 MOV     R2, R6
.text:1000DDE8                 MOV     R3, R7
.text:1000DDEC                 BL      Open__5RFileR3RFsRC7TDesC16Ui ; RFile::Open(RFs &,TDesC16 const &,uint)
.text:1000DDF0                 CMP     R0, R7
.text:1000DDF4                 BEQ     loc_1000DE04
.text:1000DDF8                 BL      PopAndDestroy__12CleanupStack ; CleanupStack::PopAndDestroy(void)
.text:1000DDFC                 B       loc_1000DE78

没错了,这段代码是在读取文件内容。
也就是说,这段代码是处理读进度的功能。

回过头来,在看看对PetFish.sav的另一个调用

.text:1000A7D0                 CMP     R5, #0
.text:1000A7D4                 BEQ     loc_1000A810
.text:1000A7D8                 ADD     R4, SP, #0x1DC+var_1D4
.text:1000A7DC                 MOV     R0, R4
.text:1000A7E0                 MOV     R1, R5
.text:1000A7E4                 BL      Des__6HBufC8    ; HBufC8::Des(void)
.text:1000A7E8                 MOV     R0, R4
.text:1000A7EC                 ADD     R1, SP, #0x1DC+var_188
.text:1000A7F0                 MOV     R2, #0x174
.text:1000A7F4                 BL      Copy__5TDes8PCUci ; TDes8::Copy(uchar const *,int)
.text:1000A7F8                 MOV     R0, R5
.text:1000A7FC                 LDR     R1, =dword_10026E70;这里是PetFish.sav调用
.text:1000A800                 BL      sub_1000DCA0
.text:1000A804                 MOV     R7, R0
.text:1000A808                 MOV     R0, R5
.text:1000A80C                 BL      __builtin_delete
.text:1000A810

这段代码调用了PetFish.sav直接又调用了sub_1000DCA0,我们看看sub_1000DCA0是什么:

text:1000DCA0                 STMFD   SP!, {R4-R7,LR}
.text:1000DCA4                 SUB     SP, SP, #0x60
.text:1000DCA8                 MOV     R7, R0
.text:1000DCAC                 MOV     R5, R1
.text:1000DCB0                 ADD     R4, SP, #0x74+var_54
.text:1000DCB4                 MOV     R3, #0
.text:1000DCB8                 STR     R3, [SP,#0x74+var_54]
.text:1000DCBC                 ADD     R6, SP, #0x74+var_5C
.text:1000DCC0                 STR     R3, [SP,#0x74+var_5C]
.text:1000DCC4                 STR     R3, [R6,#4]
.text:1000DCC8                 MOV     R0, R4
.text:1000DCCC                 MOV     R1, #4
.text:1000DCD0                 BL      Connect__3RFsi  ; RFs::Connect(int)
.text:1000DCD4                 BL      LeaveIfError__4Useri ; User::LeaveIfError(int)
.text:1000DCD8                 LDR     R3, =loc_10026604
.text:1000DCDC                 STR     R3, [SP,#0x74+var_64]
.text:1000DCE0                 STR     R4, [SP,#0x74+var_60]
.text:1000DCE4                 ADD     R3, SP, #0x74+var_64
.text:1000DCE8                 LDMIA   R3, {R0,R1}
.text:1000DCEC                 BL      PushL__12CleanupStackG12TCleanupItem ; CleanupStack::PushL(TCleanupItem)
.text:1000DCF0                 MOV     R0, R6
.text:1000DCF4                 MOV     R1, R4
.text:1000DCF8                 MOV     R2, R5
.text:1000DCFC                 MOV     R3, #0x200
.text:1000DD00                 BL      Replace__5RFileR3RFsRC7TDesC16Ui ; RFile::Replace(RFs &,TDesC16 const &,uint)
.text:1000DD04                 SUBS    R5, R0, #0
.text:1000DD08                 BNE     loc_1000DD78
.text:1000DD0C                 LDR     R3, =loc_10026608
.text:1000DD10                 STR     R3, [SP,#0x74+var_6C]
.text:1000DD14                 STR     R6, [SP,#0x74+var_68]
.text:1000DD18                 ADD     R3, SP, #0x74+var_6C
.text:1000DD1C                 LDMIA   R3, {R0,R1}
.text:1000DD20                 BL      PushL__12CleanupStackG12TCleanupItem ; CleanupStack::PushL(TCleanupItem)
.text:1000DD24                 ADD     R4, SP, #0x74+var_50
.text:1000DD28                 MOV     R0, R4
.text:1000DD2C                 MOV     R1, R6
.text:1000DD30                 MOV     R2, R5
.text:1000DD34                 BL      __16RFileWriteStreamR5RFilei
.text:1000DD38                 LDR     R3, =loc_10026600
.text:1000DD3C                 STMEA   SP, {R3,R4}
.text:1000DD40                 MOV     R3, SP
.text:1000DD44                 LDMIA   R3, {R0,R1}
.text:1000DD48                 BL      PushL__12CleanupStackG12TCleanupItem ; CleanupStack::PushL(TCleanupItem)
.text:1000DD4C                 MOV     R0, R4
.text:1000DD50                 MOV     R1, R7
.text:1000DD54                 BL      WriteL__12RWriteStreamRC6TDesC8 ; RWriteStream::WriteL(TDesC8 const &)
.text:1000DD58                 BL      PopAndDestroy__12CleanupStack ; CleanupStack::PopAndDestroy(void)
.text:1000DD5C                 BL      PopAndDestroy__12CleanupStack ; CleanupStack::PopAndDestroy(void)
.text:1000DD60                 BL      PopAndDestroy__12CleanupStack ; CleanupStack::PopAndDestroy(void)
.text:1000DD64                 MOV     R0, #1
.text:1000DD68                 B       loc_1000DD80

很长,不过很好看懂...这里显然是在写文件,那么就应该是存储进度的地方。

好了,我们回想一下,读写操作有什么不同呢?唯一的差别就是读进度的时候进行了 当前路径+ petfish.sav 的操作。

可以动手修改了,我们可以吧 当前路径+ petfish.sav 去掉,让他和写的时候进行同样的操作。

将一下标记为已注释的部分用NOP指令替换掉,就可以完成修正工作了。
修正之后记录存放在c:\petfish.sav,如果觉得不爽可以自己用UE改成e:\fish.sav

text:100093B4                 MOV     R0, #0x174
.text:100093B8                 BL      NewL__6HBufC8i  ; HBufC8::NewL(int)
.text:100093BC                 MOV     R6, R0
.text:100093C0                 ADD     R0, SP, #0x328+var_120 ; 已注释
.text:100093C4                 MOV     R1, #0x80
.text:100093C8                 BL      __10TBufBase16i ; 已注释
.text:100093CC                 MOV     R4, SP          ; 已注释

.text:100093D0                 MOV     R0, R4
.text:100093D4                 LDR     R1, =dword_10026E70
.text:100093D8                 BL      sub_1000E25C    ; 已注释
.text:100093DC                 ADD     R0, SP, #0x328+var_120 ; 已注释
.text:100093E0                 MOV     R1, R4          ; 已注释
.text:100093E4                 BL      Copy__6TDes16RC7TDesC16 ; 已注释

.text:100093E8                 MOV     R0, R6
.text:100093EC                 ADD     R1, SP, #0x328+var_120 ; 已注释

[ 本帖最后由 小毛 于 2005-10-18 12:48 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2005-10-18 12:39:57 | 显示全部楼层
真是好帖,谢谢小毛的精彩经验分享,一直没用IDA来深入搞一搞,看了教程看来可以试试了!
回复 支持 反对

使用道具 举报

发表于 2005-10-18 12:45:12 | 显示全部楼层
我把这东西重新汉化了一下,回头一起发上来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-18 13:02:36 | 显示全部楼层
谢谢毛毛的精彩教程。

我就是看不懂那些代码啊~~!有什么技巧吗?
另,为什么注释掉那几行?如果不好回答,就等闲的时候再说吧。

还有,能不能把写操作前加上获取程序当前路径?那样最完美。hehe,期待
回复 支持 反对

使用道具 举报

发表于 2005-10-18 13:14:53 | 显示全部楼层
原帖由 foxcon 于 2005-10-18 13:02 发表
谢谢毛毛的精彩教程。

我就是看不懂那些代码啊~~!有什么技巧吗?
另,为什么注释掉那几行?如果不好回答,就等闲的时候再说吧。

还有,能不能把写操作前加上获取程序当前路径?那样最完美。hehe,期待


注释那几行不是一两句能说清楚的,需要很多基础知识的理解。
或者说能看懂为什么注释的,也就不用我解释,看不懂的我解释半天也解释不清楚...
基本上就是说把内容合并的代码注释掉不用。
理论上能加,但是工作量超级大...所以还是算了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-18 13:25:36 | 显示全部楼层
原帖由 小毛 于 2005-10-18 13:14 发表


注释那几行不是一两句能说清楚的,需要很多基础知识的理解。
或者说能看懂为什么注释的,也就不用我解释,看不懂的我解释半天也解释不清楚...
基本上就是说把内容合并的代码注释掉不用。
理论上能加,但是 ...




我能看明白的
BL=跳转
Mov 赋值
CMP 比较?

还有什么BEQ之类的,我就不懂了。有没有系统点的文档可以参考阿?
回复 支持 反对

使用道具 举报

发表于 2006-2-19 22:39:23 | 显示全部楼层
我家MM最喜欢了.
回复 支持 反对

使用道具 举报

发表于 2006-3-17 09:31:54 | 显示全部楼层

?????????

怎么还要再注册???
要注册码!!
回复 支持 反对

使用道具 举报

发表于 2006-3-17 11:25:55 | 显示全部楼层
支持兄弟!
回复 支持 反对

使用道具 举报

发表于 2006-4-13 23:38:59 | 显示全部楼层
希望快点有完美吧~~
回复 支持 反对

使用道具 举报

发表于 2006-4-13 23:41:31 | 显示全部楼层
手机论坛     
» men130302299: 退出 | 短消息 | 控制面板 | 会员 | 搜索 | 万年历 | 帮助   



手机论坛 » 西门子:SX1论坛--Series 60 » PetFish(3D宠物鱼)V1.0a 汉化修改版   



上一主题 下一主题

35   2/2   <   1   2  


      
标题: [汉化] PetFish(3D宠物鱼)V1.0a 汉化修改版      全文标题   


   
kfmn191
四段会员




UID 3489
精华 0
积分 36
帖子 280
金钱 525 两
阅读权限 40
注册 2005-8-11
手机派sx1,6688
来自 东京汴梁
状态 在线  [广告]: [ivan8888维修店]西门子专业维修(快速修复SX1不开机)
--------------------------------------------------------------------------------
抓图呀??好麻烦的。回家试试。





http://www.pwap.cn/pwapad.php?pwapid=kfmn191

2005-10-17 14:28 #21
               

  
小毛 (0 1 1 0 汉化组)
超级版主

最近很忙...



      
UID 5589
精华 5
积分 247
帖子 690
金钱 1355 两
阅读权限 254
注册 2005-8-12
手机派3518i-m55-sx1
状态 离线  [广告]: [ivan8888维修店]西门子专业维修(快速修复SX1不开机)
--------------------------------------------------------------------------------
我已经搞定完美版了,foxcon 的改法是碰巧撞上了而已,哈哈。

我反汇编之后改了内核算法,实现了完美存档,等我晚上整理一下发上来吧,现在比较忙...





出售SX1和55系列配件


2005-10-17 16:34 #22
                 

  
foxcon (0 1 1 0 汉 化 组)
0110汉化组

FoXoN也是我



UID 4240
精华 0
积分 160
帖子 551
金钱 1374 两
阅读权限 220
注册 2005-8-11
手机派SX1 6688 3618
状态 在线  [广告]: [ivan8888维修店]西门子专业维修(快速修复SX1不开机)
--------------------------------------------------------------------------------



QUOTE:
原帖由 小毛 于 2005-10-17 16:34 发表
我已经搞定完美版了,foxcon 的改法是碰巧撞上了而已,哈哈。

我反汇编之后改了内核算法,实现了完美存档,等我晚上整理一下发上来吧,现在比较忙...
顶啊,Very期待~~~!至于我那个,真是:$





╔═╗               ╔═╗
║═╬═╦╦╦═╣║║
║╔╣║╠   ╣║║║║
╚╝╚═╩╩╩═╩╩╝


2005-10-17 19:13 #23
               

  
foxcon (0 1 1 0 汉 化 组)
0110汉化组

FoXoN也是我



UID 4240
精华 0
积分 160
帖子 551
金钱 1374 两
阅读权限 220
注册 2005-8-11
手机派SX1 6688 3618
状态 在线  [广告]: [ivan8888维修店]西门子专业维修(快速修复SX1不开机)
--------------------------------------------------------------------------------
毛毛阿,能不能写个教程,让我也进步一下啊~~!





╔═╗               ╔═╗
║═╬═╦╦╦═╣║║
║╔╣║╠   ╣║║║║
╚╝╚═╩╩╩═╩╩╝


2005-10-17 19:16 #24
               

  
开始就是错
二段会员




UID 7806
精华 0
积分 16
帖子 100
金钱 0 两
阅读权限 20
注册 2005-8-13
手机派
状态 离线  [广告]: [ivan8888维修店]西门子专业维修(快速修复SX1不开机)
--------------------------------------------------------------------------------
感谢小毛期待完美版





欢迎光临0110手机论坛http://mobile.0110.cn

本贴地址http://mobile.0110.cn/viewthread.php?tid=172892
你可以复制发送给QQ或者其他上面的好友前来讨论分享~  

2005-10-18 09:28 #25
               

  
小毛 (0 1 1 0 汉化组)
超级版主

最近很忙...



      
UID 5589
精华 5
积分 247
帖子 690
金钱 1355 两
阅读权限 254
注册 2005-8-12
手机派3518i-m55-sx1
状态 离线  [广告]: 广告位招租,如有意者请在论坛内短信给“bob”管理员
--------------------------------------------------------------------------------
PetFish修正教程:

PetFish存在存档问题,原版会将进度存档存入C:\petfish.sav中,但是读取存档却从程序安装目录下读取,比如E:\system\apps\PetFish\petfish.sav。这样就造成了每次读取进度都会失败的问题。

用UE打开PetFish.app,找到PetFish.sav,尝试改为E:\Fish.sav,运行结果是存档的确存入了E:\Fish.sav,但是依然不能正确读取。

于是再次修改,将E:\system\apps\petfish\petfish.sav。这样修改由于原本字节空间不足,所以需要从其他资源的地方借用一部分字节,并且注意将头四个字节的0B修改成21,即资源扩张后的有效长度。
按道理说,如果将这里修改了,存档文件直接写入安装目录,读取的时候就应该可以了,可是试验的结果很令人沮丧...在读取进度的时候程序会报错。

看来简单的用UE修改解决不了这个问题,于是用IDA反编译petfish.app,从代码内核进行分析。

首先找到petfish.sav的资源地址:

.text:10026E70 dword_10026E70  DCD 0xB, 0x650050, 0x660074, 0x730069, 0x2E0068, 0x610073
.text:10026E70                                         ; DATA XREF: sub_10009338:off_10009414o
.text:10026E70                                         ; .text:off_1000A884o

因为是UNICODE,这里没有直接解析成String,你可以对此段Undefine,就可以看到内容。

这个资源被两次调用,先看 DATA XREF: sub_10009338:off_10009414o

text:100093B4                 MOV     R0, #0x174
.text:100093B8                 BL      NewL__6HBufC8i  ; HBufC8::NewL(int)
.text:100093BC                 MOV     R6, R0
.text:100093C0                 ADD     R0, SP, #0x328+var_120
.text:100093C4                 MOV     R1, #0x80
.text:100093C8                 BL      __10TBufBase16i
.text:100093CC                 MOV     R4, SP         
.text:100093D0                 MOV     R0, R4
.text:100093D4                 LDR     R1, =dword_10026E70    ;这里是PetFish.sav调用
.text:100093D8                 BL      sub_1000E25C
.text:100093DC                 ADD     R0, SP, #0x328+var_120
.text:100093E0                 MOV     R1, R4         
.text:100093E4                 BL      Copy__6TDes16RC7TDesC16
.text:100093E8                 MOV     R0, R6
.text:100093EC                 ADD     R1, SP, #0x328+var_120
.text:100093F0                 BL      sub_1000DD8C
.text:100093F4                 CMP     R0, #0
.text:100093F8                 BEQ     loc_10009418
.text:100093FC                 MOV     R0, R6
.text:10009400                 BL      Ptr__C6TDesC8   ; TDesC8::Ptr(void)
.text:10009404                 MOV     R1, R0
.text:10009408                 MOV     R0, R5
.text:1000940C                 BL      sub_10009234
.text:10009410                 B       loc_10009420

这段代码的大致含义是将PetFish.sav与sub_1000E25C调用得到的内容进行拼接。然后调用 sub_1000DD8C及其后的代码。
我们先看看sub_1000E25C是什么:
STMFD   SP!, {R4-R7,LR}
.text:1000E260                 SUB     SP, SP, #0x420
.text:1000E264                 SUB     SP, SP, #8
.text:1000E268                 MOV     R7, R0
.text:1000E26C                 MOV     R6, R1
.text:1000E270                 ADD     R5, SP, #0x43C+var_234
.text:1000E274                 MOV     R0, R5
.text:1000E278                 BL      __6TParse
.text:1000E27C                 MOV     R4, SP
.text:1000E280                 MOV     R0, R4
.text:1000E284                 BL      sub_1000E1F4
.text:1000E288                 MOV     R0, R5
.text:1000E28C                 MOV     R1, R4
.text:1000E290                 MOV     R2, R6
.text:1000E294                 MOV     R3, #0
.text:1000E298                 BL      Set__6TParseRC7TDesC16PC7TDesC16T2 ; TParse::Set(TDesC16 const &,TDesC16 const *,TDesC16 const *)
.text:1000E29C                 MOV     R0, R5
.text:1000E2A0                 BL      FullName__C10TParseBase ; TParseBase::FullName(void)
.text:1000E2A4                 MOV     R1, R0
.text:1000E2A8                 MOV     R0, R7
.text:1000E2AC                 MOV     R2, #0x100
.text:1000E2B0                 BL      __10TBufBase16RC7TDesC16i
.text:1000E2B4                 MOV     R0, R7
.text:1000E2B8                 ADD     SP, SP, #0x28
.text:1000E2BC                 ADD     SP, SP, #0x400
.text:1000E2C0                 LDMFD   SP!, {R4-R7,LR}
.text:1000E2C4                 BX      LR

很显然,这段代码是用来得到程序运行的当前路径。
那么拼接的结果就是 当前路径+petfish.sav。

再看 sub_1000DD8C

.text:1000DD8C                 STMFD   SP!, {R4-R8,LR}
.text:1000DD90                 SUB     SP, SP, #0x2C
.text:1000DD94                 MOV     R8, R0
.text:1000DD98                 MOV     R6, R1
.text:1000DD9C                 ADD     R4, SP, #0x44+var_28
.text:1000DDA0                 MOV     R7, #0
.text:1000DDA4                 STR     R7, [SP,#0x44+var_28]
.text:1000DDA8                 ADD     R5, SP, #0x44+var_30
.text:1000DDAC                 STR     R7, [SP,#0x44+var_30]
.text:1000DDB0                 STR     R7, [R5,#4]
.text:1000DDB4                 MOV     R0, R4
.text:1000DDB8                 MOV     R1, #4
.text:1000DDBC                 BL      Connect__3RFsi  ; RFs::Connect(int)
.text:1000DDC0                 BL      LeaveIfError__4Useri ; User::LeaveIfError(int)
.text:1000DDC4                 LDR     R3, =loc_10026604
.text:1000DDC8                 STR     R3, [SP,#0x44+var_38]
.text:1000DDCC                 STR     R4, [SP,#0x44+var_34]
.text:1000DDD0                 ADD     R3, SP, #0x44+var_38
.text:1000DDD4                 LDMIA   R3, {R0,R1}
.text:1000DDD8                 BL      PushL__12CleanupStackG12TCleanupItem ; CleanupStack::PushL(TCleanupItem)
.text:1000DDDC                 MOV     R0, R5
.text:1000DDE0                 MOV     R1, R4
.text:1000DDE4                 MOV     R2, R6
.text:1000DDE8                 MOV     R3, R7
.text:1000DDEC                 BL      Open__5RFileR3RFsRC7TDesC16Ui ; RFile::Open(RFs &,TDesC16 const &,uint)
.text:1000DDF0                 CMP     R0, R7
.text:1000DDF4                 BEQ     loc_1000DE04
.text:1000DDF8                 BL      PopAndDestroy__12CleanupStack ; CleanupStack::PopAndDestroy(void)
.text:1000DDFC                 B       loc_1000DE78

没错了,这段代码是在读取文件内容。
也就是说,这段代码是处理读进度的功能。

回过头来,在看看对PetFish.sav的另一个调用

.text:1000A7D0                 CMP     R5, #0
.text:1000A7D4                 BEQ     loc_1000A810
.text:1000A7D8                 ADD     R4, SP, #0x1DC+var_1D4
.text:1000A7DC                 MOV     R0, R4
.text:1000A7E0                 MOV     R1, R5
.text:1000A7E4                 BL      Des__6HBufC8    ; HBufC8::Des(void)
.text:1000A7E8                 MOV     R0, R4
.text:1000A7EC                 ADD     R1, SP, #0x1DC+var_188
.text:1000A7F0                 MOV     R2, #0x174
.text:1000A7F4                 BL      Copy__5TDes8PCUci ; TDes8::Copy(uchar const *,int)
.text:1000A7F8                 MOV     R0, R5
.text:1000A7FC                 LDR     R1, =dword_10026E70;这里是PetFish.sav调用
.text:1000A800                 BL      sub_1000DCA0
.text:1000A804                 MOV     R7, R0
.text:1000A808                 MOV     R0, R5
.text:1000A80C                 BL      __builtin_delete
.text:1000A810

这段代码调用了PetFish.sav直接又调用了sub_1000DCA0,我们看看sub_1000DCA0是什么:

text:1000DCA0                 STMFD   SP!, {R4-R7,LR}
.text:1000DCA4                 SUB     SP, SP, #0x60
.text:1000DCA8                 MOV     R7, R0
.text:1000DCAC                 MOV     R5, R1
.text:1000DCB0                 ADD     R4, SP, #0x74+var_54
.text:1000DCB4                 MOV     R3, #0
.text:1000DCB8                 STR     R3, [SP,#0x74+var_54]
.text:1000DCBC                 ADD     R6, SP, #0x74+var_5C
.text:1000DCC0                 STR     R3, [SP,#0x74+var_5C]
.text:1000DCC4                 STR     R3, [R6,#4]
.text:1000DCC8                 MOV     R0, R4
.text:1000DCCC                 MOV     R1, #4
.text:1000DCD0                 BL      Connect__3RFsi  ; RFs::Connect(int)
.text:1000DCD4                 BL      LeaveIfError__4Useri ; User::LeaveIfError(int)
.text:1000DCD8                 LDR     R3, =loc_10026604
.text:1000DCDC                 STR     R3, [SP,#0x74+var_64]
.text:1000DCE0                 STR     R4, [SP,#0x74+var_60]
.text:1000DCE4                 ADD     R3, SP, #0x74+var_64
.text:1000DCE8                 LDMIA   R3, {R0,R1}
.text:1000DCEC                 BL      PushL__12CleanupStackG12TCleanupItem ; CleanupStack::PushL(TCleanupItem)
.text:1000DCF0                 MOV     R0, R6
.text:1000DCF4                 MOV     R1, R4
.text:1000DCF8                 MOV     R2, R5
.text:1000DCFC                 MOV     R3, #0x200
.text:1000DD00                 BL      Replace__5RFileR3RFsRC7TDesC16Ui ; RFile::Replace(RFs &,TDesC16 const &,uint)
.text:1000DD04                 SUBS    R5, R0, #0
.text:1000DD08                 BNE     loc_1000DD78
.text:1000DD0C                 LDR     R3, =loc_10026608
.text:1000DD10                 STR     R3, [SP,#0x74+var_6C]
.text:1000DD14                 STR     R6, [SP,#0x74+var_68]
.text:1000DD18                 ADD     R3, SP, #0x74+var_6C
.text:1000DD1C                 LDMIA   R3, {R0,R1}
.text:1000DD20                 BL      PushL__12CleanupStackG12TCleanupItem ; CleanupStack::PushL(TCleanupItem)
.text:1000DD24                 ADD     R4, SP, #0x74+var_50
.text:1000DD28                 MOV     R0, R4
.text:1000DD2C                 MOV     R1, R6
.text:1000DD30                 MOV     R2, R5
.text:1000DD34                 BL      __16RFileWriteStreamR5RFilei
.text:1000DD38                 LDR     R3, =loc_10026600
.text:1000DD3C                 STMEA   SP, {R3,R4}
.text:1000DD40                 MOV     R3, SP
.text:1000DD44                 LDMIA   R3, {R0,R1}
.text:1000DD48                 BL      PushL__12CleanupStackG12TCleanupItem ; CleanupStack::PushL(TCleanupItem)
.text:1000DD4C                 MOV     R0, R4
.text:1000DD50                 MOV     R1, R7
.text:1000DD54                 BL      WriteL__12RWriteStreamRC6TDesC8 ; RWriteStream::WriteL(TDesC8 const &)
.text:1000DD58                 BL      PopAndDestroy__12CleanupStack ; CleanupStack::PopAndDestroy(void)
.text:1000DD5C                 BL      PopAndDestroy__12CleanupStack ; CleanupStack::PopAndDestroy(void)
.text:1000DD60                 BL      PopAndDestroy__12CleanupStack ; CleanupStack::PopAndDestroy(void)
.text:1000DD64                 MOV     R0, #1
.text:1000DD68                 B       loc_1000DD80

很长,不过很好看懂...这里显然是在写文件,那么就应该是存储进度的地方。

好了,我们回想一下,读写操作有什么不同呢?唯一的差别就是读进度的时候进行了 当前路径+ petfish.sav 的操作。

可以动手修改了,我们可以吧 当前路径+ petfish.sav 去掉,让他和写的时候进行同样的操作。

将一下标记为已注释的部分用NOP指令替换掉,就可以完成修正工作了。
修正之后记录存放在c:\petfish.sav,如果觉得不爽可以自己用UE改成e:\fish.sav

text:100093B4                 MOV     R0, #0x174
.text:100093B8                 BL      NewL__6HBufC8i  ; HBufC8::NewL(int)
.text:100093BC                 MOV     R6, R0
.text:100093C0                 ADD     R0, SP, #0x328+var_120 ; 已注释
.text:100093C4                 MOV     R1, #0x80
.text:100093C8                 BL      __10TBufBase16i ; 已注释
.text:100093CC                 MOV     R4, SP          ; 已注释
.text:100093D0                 MOV     R0, R4
.text:100093D4                 LDR     R1, =dword_10026E70
.text:100093D8                 BL      sub_1000E25C    ; 已注释
.text:100093DC                 ADD     R0, SP, #0x328+var_120 ; 已注释
.text:100093E0                 MOV     R1, R4          ; 已注释
.text:100093E4                 BL      Copy__6TDes16RC7TDesC16 ; 已注释
.text:100093E8                 MOV     R0, R6
.text:100093EC                 ADD     R1, SP, #0x328+var_120 ; 已注释

[ 本帖最后由 小毛 于 2005-10-18 12:48 编辑 ]





出售SX1和55系列配件


2005-10-18 11:56 #26
                 

  
shinechou
四段会员




UID 10525
精华 2
积分 44
帖子 1224
金钱 1965 两
阅读权限 40
注册 2005-8-14
手机派
状态 在线  [广告]: 广告位招租,如有意者请在论坛内短信给“bob”管理员
--------------------------------------------------------------------------------
真是好帖,谢谢小毛的精彩经验分享,一直没用IDA来深入搞一搞,看了教程看来可以试试了!





欢迎光临0110手机论坛http://mobile.0110.cn

本贴地址http://mobile.0110.cn/viewthread.php?tid=172892
你可以复制发送给QQ或者其他上面的好友前来讨论分享~  

2005-10-18 12:39 #27
               

  
小毛 (0 1 1 0 汉化组)
超级版主

最近很忙...



      
UID 5589
精华 5
积分 247
帖子 690
金钱 1355 两
阅读权限 254
注册 2005-8-12
手机派3518i-m55-sx1
状态 离线  [广告]: [ivan8888维修店]西门子专业维修(快速修复SX1不开机)
--------------------------------------------------------------------------------
我把这东西重新汉化了一下,回头一起发上来。





出售SX1和55系列配件


2005-10-18 12:45 #28
                 

  
foxcon (0 1 1 0 汉 化 组)
0110汉化组

FoXoN也是我



UID 4240
精华 0
积分 160
帖子 551
金钱 1374 两
阅读权限 220
注册 2005-8-11
手机派SX1 6688 3618
状态 在线  [广告]: 广告位招租,如有意者请在论坛内短信给“bob”管理员
--------------------------------------------------------------------------------
谢谢毛毛的精彩教程。

我就是看不懂那些代码啊~~!有什么技巧吗?
另,为什么注释掉那几行?如果不好回答,就等闲的时候再说吧。

还有,能不能把写操作前加上获取程序当前路径?那样最完美。hehe,期待





╔═╗               ╔═╗
║═╬═╦╦╦═╣║║
║╔╣║╠   ╣║║║║
╚╝╚═╩╩╩═╩╩╝


2005-10-18 13:02 #29
               

  
小毛 (0 1 1 0 汉化组)
超级版主

最近很忙...



      
UID 5589
精华 5
积分 247
帖子 690
金钱 1355 两
阅读权限 254
注册 2005-8-12
手机派3518i-m55-sx1
状态 离线  [广告]: 广告位招租,如有意者请在论坛内短信给“bob”管理员
--------------------------------------------------------------------------------



QUOTE:
原帖由 foxcon 于 2005-10-18 13:02 发表
谢谢毛毛的精彩教程。

我就是看不懂那些代码啊~~!有什么技巧吗?
另,为什么注释掉那几行?如果不好回答,就等闲的时候再说吧。

还有,能不能把写操作前加上获取程序当前路径?那样最完美。hehe,期待
注释那几行不是一两句能说清楚的,需要很多基础知识的理解。
或者说能看懂为什么注释的,也就不用我解释,看不懂的我解释半天也解释不清楚...
基本上就是说把内容合并的代码注释掉不用。
理论上能加,但是工作量超级大...所以还是算了。





出售SX1和55系列配件


2005-10-18 13:14 #30
                 

  
foxcon (0 1 1 0 汉 化 组)
0110汉化组

FoXoN也是我



UID 4240
精华 0
积分 160
帖子 551
金钱 1374 两
阅读权限 220
注册 2005-8-11
手机派SX1 6688 3618
状态 在线  [广告]: [ivan8888维修店]西门子专业维修(快速修复SX1不开机)
--------------------------------------------------------------------------------



QUOTE:
原帖由 小毛 于 2005-10-18 13:14 发表


注释那几行不是一两句能说清楚的,需要很多基础知识的理解。
或者说能看懂为什么注释的,也就不用我解释,看不懂的我解释半天也解释不清楚...
基本上就是说把内容合并的代码注释掉不用。
理论上能加,但是 ...
我能看明白的
BL=跳转
Mov 赋值
CMP 比较?

还有什么BEQ之类的,我就不懂了。有没有系统点的文档可以参考阿?





╔═╗               ╔═╗
║═╬═╦╦╦═╣║║
║╔╣║╠   ╣║║║║
╚╝╚═╩╩╩═╩╩╝


2005-10-18 13:25 #31
               

  
tinkle
注册会员




UID 147248
精华 0
积分 1
帖子 53
金钱 0 两
阅读权限 5
注册 2006-2-1
手机派13481259050
状态 离线  [广告]: [ivan8888维修店]西门子专业维修(快速修复SX1不开机)
--------------------------------------------------------------------------------
我家MM最喜欢了.





欢迎光临0110手机论坛http://mobile.0110.cn

本贴地址http://mobile.0110.cn/viewthread.php?tid=172892
你可以复制发送给QQ或者其他上面的好友前来讨论分享~  

2006-2-19 22:39 #32
            

  
172645319
注册会员




UID 131613
精华 0
积分 1
帖子 14
金钱 55 两
阅读权限 5
注册 2005-11-14
手机派E398 SX1
状态 离线  [广告]: [ivan8888维修店]西门子专业维修(快速修复SX1不开机)
--------------------------------------------------------------------------------
?????????

怎么还要再注册???
要注册码!!





欢迎光临0110手机论坛http://mobile.0110.cn

本贴地址http://mobile.0110.cn/viewthread.php?tid=172892
你可以复制发送给QQ或者其他上面的好友前来讨论分享~  

2006-3-17 09:31 #33
            

  
夏天的冰
注册会员




UID 147723
精华 0
积分 1
帖子 42
金钱 2 两
阅读权限 5
注册 2006-2-4
手机派西门子SX1
状态 离线  [广告]: 广告位招租,如有意者请在论坛内短信给“bob”管理员
--------------------------------------------------------------------------------
支持兄弟!





欢迎光临0110手机论坛http://mobile.0110.cn

本贴地址http://mobile.0110.cn/viewthread.php?tid=172892
你可以复制发送给QQ或者其他上面的好友前来讨论分享~  

2006-3-17 11:25 #34
            

  
men130302299
注册会员




UID 16126
精华 0
积分 1
帖子 151
金钱 16 两
阅读权限 5
注册 2005-8-15
手机派西门子SX1
状态 在线  [广告]: 广告位招租,如有意者请在论坛内短信给“bob”管理员
--------------------------------------------------------------------------------
希望快点有完美吧~~





欢迎光临0110手机论坛http://mobile.0110.cn

本贴地址http://mobile.0110.cn/viewthread.php?tid=172892
你可以复制发送给QQ或者其他上面的好友前来讨论分享~  

2006-4-13 23:38 #35
               




35   2/2   <   1   2  


      

相关主题 更多相关主题   

标题 论坛 作者 回复 查看 最后发表
〖0110汉化组荣誉出品〗Dimmer修改版实现开机自启动后自动退出 西门子:SX1论坛--Series 60 泰顺机友会尘封
2006-03-12 37 511 2006-03-26 00:36:30
更新Filemanger v1.3a,11.17修改皮肤 西门子:65系列手机论坛 YANZI7503
2005-11-01 128 10528 2005-12-30 01:27:43
空神出品-资源发布(2.20更新。。。) 西门子:65系列手机论坛 zhangxxx
2005-10-04 899 213375 2006-03-07 21:56:07
我修正过的Contacts.Manager.v1.11 MMC版 西门子:SX1论坛--Series 60 segalgx
2006-03-12 21 188 2006-03-23 21:05:43
[汉化]全能闹钟TimeTool V1.04.3简体中文最终版(3种完美中文语音实现准确报时) 西门子:SX1论坛--Series 60 oscarlam
2005-09-11 172 223910 2006-02-28 02:29:05


快速回复主题
标题:    (可选)
选项:
禁用 URL 识别
禁用 Smilies
禁用 Discuz! 代码
使用个人签名
接收新回复邮件通知  
           [完成后可按 Ctrl+Enter 发布]  


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题   


论坛跳转 ... 西门子手机论坛专区  > 西门子:SX1论坛--Series 60  > 明基-西门子(BenQ-Siemens)手机论坛  > 西门子:75系列新型手机论坛  > 西门子:65系列手机论坛      > C6Cv53补丁      > CX6Cv50补丁      > CX7Cv50补丁      > M6Cv50补丁      > S6Cv53补丁      > SL6Cv50补丁      > SK6Cv43补丁  > 西门子:55系列手机论坛  > 西门子:6688系列手机论坛  > 西门子:其它型号手机论坛      > x618系列      > 其它黑白机      > XELIBRI系列  > 西门子手机博物馆      > 手机资料库 智能手机论坛专区  > SmartPhone系统论坛  > Symbian系列论坛  > Pocket PC 系统论坛  > Linux系统论坛 其他品牌手机论坛专区  > 三星手机升级,软件,解锁下载专区      > 三星游戏,铃声.图片软件下载专区  > 三星手机技术和新机展示专区  > 三星娱乐自由专区  > 其他国外及国产品牌手机      > 摩托罗拉      > 索尼爱立信 多媒体资源专区  > 多媒体资源主论坛  > 视频  > 图片  > 音频  > 电子书  > Flash Lite 开发组与软件交流、硬件维修专区  > 西门子:SPGC开发小组论坛  > "0110手机网"汉化组论坛  > JAVA软件开发组专用论坛  > 手机软件使用与交流专区  > 手机硬件维修与咨询专区      > 技术文章专区(只可以浏览,回复) 硬件交易专区  > 手机交易区  > 跳蚤大市场  > 交易投诉区      > 违规待删区      > 交易投诉问题保留区  > 鸿信通手机销售专用论坛 论坛事务、公告与交流专区  > 公告专区  > 本站留言与征求意见区  > 《机地》杂志社论坛  > 0110水库区  > 0110机油区  > 科技动向与新闻论坛     




Powered by Discuz! 4.1.0 Licensed  &copy; 2001-2006 Comsenz Inc.   

所有时间为 GMT+8, 现在时间是 2006-4-13 23:39 清除 Cookies - 联系我们 - 0110手机网 - Archiver - WAP
回复 支持 反对

使用道具 举报

发表于 2006-4-17 10:59:34 | 显示全部楼层
天,头晕得很,顶,
回复 支持 反对

使用道具 举报

发表于 2006-4-17 12:25:26 | 显示全部楼层
顶!!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2006-9-6 10:17:04 | 显示全部楼层
不错,好东东!支持.......
回复 支持 反对

使用道具 举报

发表于 2006-9-6 17:32:41 | 显示全部楼层
呵呵,这个应该很好好玩的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 22:35

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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