爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 655|回复: 0
收起左侧

[借花献佛]如何找菜单里面对应的功能地址

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

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

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

x
这是印尼的 RizaPN 大师提供的文章,我只是提供一个中文的对应版本,用到的工具也是他老人家写的

我们做图形菜单时候很需要找到原来菜单对应的函数入口,找函数的方法如下:

首先把你的手机设置成英文的,原因是因为我们只能看得清楚英文的语言资源
然后我以寻找短消息菜单的各个入口为例来讲解

首先看看短消息菜单里面都有什么

New SMS
SMS Signature
Predefined Text
Inbox
Outbox
Voice Message
Cell Broadcast
Message Setup

这些菜单的内容,是通过存储在 flash 里面的菜单数据结构来决定的,每个菜单项的标题都是一个特定的字符串,这个字符串在手机的程序里面是用一个整数的标志符(id)来表示的,而每个菜单项占用的空间是相同的,每个菜单项占用18个字节。如果知道了菜单标题对应的标识符,就可以搜索两条相邻菜单项的标识符来找到菜单结构所在的位置。

俄国人 skylord 作了一个工具,可以从手机的flash 里面取出字符串和其对应标识符的内容,这个工具只能在英文 98 下面用,所以我把弄好了的文件直接传上来,大家就不用再去找ewin98了。

1.lgp::

[upload=rar]viewfile.asp?ID=784[/upload]

这个文件是一个unicode格式的文件,你需要使用支持unicode格式的编辑器来打开它,比如 ultraedit 和 word, 打开以后我们可以看到很多这样的行

LangId 0
String $0, "<91>+List"
String $1, "<95>1 hour"
String $2, "<95>1 day"
String $3, "<95>12 hours"
String $4, "<95>Cancel"
String $5, "<95>Outgoing access"

其中 string $ 后面跟的数字就是这一行里面字符串对应的标识 id
例如 2 对应的是 "1 day"  <95> 是格式符可以不用理会

我们在这里面寻找短信菜单中两条相邻菜单项的id, New SMS 和 SMS Signature
结果如下:

有 4 个 id 对应 New SMS , 18e,18f,4f5, 781
有 1 个 id 对应 SMS Signature c43

我们需要在整个 8M flash 寻找对应的菜单项,RizaPN 写了一个工具  fmenu.exe
来简化这个寻找工作
fmenu.exe:
[upload=rar]viewfile.asp?ID=785[/upload]

这是一个命令行的程序,使用方法如下:

fmenu.exe   fullflash.bin id1,id2,id3....

第一个参数是你的完整 8M flash备份, 可以用 V_Klay 读出来

后面就是相邻菜单字串 id 的序列了,中间用逗号隔开

因为有多个 id 对应 New SMS 这个字串,
所以我们挨个试验:

fmenu block_00.bin 18e,c43

输出

Found index at address 03AB44
- menu items address : 83AA94
- subroutine address : 83AA74
- number of item     : 8 (decimal)

1. 0000 0000 018E 04F5 0000 3794 0283 0003 00D0 => 83AA74: Goto_E0BCDE
2. 0000 0000 0C43 0C43 0000 3794 0283 0003 0559 => 83AA78: Goto_E0BD4A
3. 0000 0000 0236 0235 0000 3794 0283 0003 0559 => 83AA7C: Goto_E0BD52
4. 0000 0000 00B9 04FA 0000 3794 0283 0003 00CB => 83AA80: Goto_E0C0FE
5. 0000 0000 006A 04FB 0000 3794 0283 0003 00CB => 83AA84: Goto_E0C294
6. 0000 0000 01F9 01F8 0000 3794 0283 0003 00E3 => 83AA88: Goto_E0BF54
7. 0000 0000 0098 0097 0000 3794 0283 0003 00E0 => 83AA8C: Goto_E0BF62
8. 0000 0000 04F9 051B 0000 3794 0283 0003 00D9 => 83AA90: Goto_E0C2B8

看来我们运气不错,第一个尝试就找到了,会不会是错误识别呢?
我们来验证一下,注意输出结果的第三列,前两个数就是我们刚才查找的菜单项字串 id
以此类推,后面的应该也是,因此我们在 1.lgp 中寻找第三行的 236 号字串,

String $236, "<95>Predefined text"

就是第三条菜单项的标题,应该说问题不大了,如果你不放心可以继续把后面的都验证一边。

程序输出的最后一列是形如 Goto_XXXXXX 的东西,这个是什么?这个就是我们需要的功能入口地址,赶紧抄下来吧,每一条对应一个菜单项。比如写新短消息的地址就是 E0BCDE 了。

由于西门子手机的 cpu 和 intel pc 的 cpu 一样,都采用 little endian 的字节序,因此在制作 patch 的时候,需要把这个地址两两倒过来输入 patch 里面,例如写新短消息的地址可能需要按照E0DEBC的格式输入。当然,有些图形化的菜单编辑器里面已经做了处理,因此你在编辑这些软件的配置文件增加地址的时候,可以按照原来的格式输入,不用倒过来。
*********************************************************
X618带中文的语言文件(huajia提供)

大家可以使用这个文件,就不再用把手机的语言设为E文了。

以下为X618的语言文件,包括英文、简体中文和语言文件2,方便大家查找字串。
下载:[upload=rar]viewfile.asp?ID=8871[/upload]

字串的使用方法:
String $XYZ--XYZ即为字串的编号,调用是的方法是XYZ -> YZ0X(是零,不是欧)。
比如:String $4, "取消",调用时用0400
       String $10, "通讯录",调用时用1000
       String $112, "主菜单",调用时用1201


OK02qF60.rar

105.49 KB, 下载次数: 177

[借花献佛]如何找菜单里面对应的功能地址

u0dcYgzL.rar

20.46 KB, 下载次数: 131

[借花献佛]如何找菜单里面对应的功能地址

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

本版积分规则

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

GMT+8, 2025-6-30 04:49

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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