- 积分
- 567
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
建议有一定的补丁移植经验后再来阅读此文,没有做补丁开发打算的机油不要乱尝试其中的操作,否则极易导致死机!
Armdebugger(下文简称debugger)是一款强大的系统分析与调试工具,从国外看来,目前大多数补丁的开发都离不开这个工具,大家所熟知的benj9就是采用debugger+ADS的环境.很久以前robin和regspy就叫我写一篇有关debugger方面的介绍,苦于近段时间一直忙于自己的事情,现在才有时间来静心写一些东西.
对于这个工具,我知道的也很有限,所以本质上算不上是教程,权当是经验的分享,抛砖引玉吧!我把我所知道的都写下来,也好让大家少走弯路,在此先对lisugar曾经给我提供的很多帮助表示衷心的感谢!
好了废话不说了,进入正题吧!
=========================================================================
一.要使用这个工具,必须要有AT-CGSN补丁的配合,令人高兴的是,现在这个补丁已经可以由debugger自动生成.
安装好debugger并运行后,可以看到如下界面:
点击Tools->Generate CGSN patch,如下图:
之后会弹出下图中的窗口:
其中Fullflash file用于指定生成CGSN的fullflash的路径,该fullflash必须是自己手机的机型,最好是干净的备份;Flash Base是加载的基址,在这里不需要修改;Patch adress指明生成的CGSN占用的地址,[Auto]表示自动分配,但这有可能跟现有的补丁发生冲突,如果冲突,则需要手动进行指定.最后,点击Generate即可生成CGSN.
(PS:建议用debugger v0.7.2或更低版本生成CGSN,v0.7.4生成的CGSN在某些手机上联机时会导致死机,我自己就是一个特例)
二.CGSN刷入手机后,接好数据线,在debugger中指定数据线的端口,如下图:
再点击按键,即可连接手机,下图中鼠标所指的窗口变成绿色时即表示联机成功.
(PS:联机建议采用510线,虽然在作者的说明中,v0.7.4版已经支持540线了,但是我没有成功,大家也不妨试试)
三.联机成功后,点击Tools->Ram Access Analyzer
弹出上图窗口后,进行如下操作:
1.重启手机(这步也可省略);
2.点击Initialize按键;
3.当working字样结束后,尽量多的使用手机上的功能(越多越好);
4.完成后点击Analyze,经过一段时间的等待后,会得出如下分析结果:
从中选取最大的blocks和起始地址(上图中为:A8373000,124 blocks),进入debugger的安装目录中,打开devices.ini,选取自己对应的机型,比如是M65,做如下修改:
1.将[SIEMENS:M65:58]修改为[SIEMENS:M6C:50];
2.Name = Siemens M6C fw50;
3.Pool1Address = 0xa8385000;Pool1Pages = 105;此处分别填入刚才分析获得的Adress和最大blocks.
之后再次进行联机操作,到此,准备工作算是完成了.
=============================================================================
四.再次联机后即可看到如下界面:
debugger包含如下几个部分:
1.左上角是调试窗口;
2.右边的上两个窗口为观察窗口,在这里可以观察ram或者rom中的数据(双击A8XXXXXX逆序的地址即可进入ram窗口,双击A0或A1逆序的地址即可进入rom窗口);
3.左下角的窗口为数据分析窗口;
4.右边最下面的窗口为寄存器观察窗口.
关于ram窗口
在这里可以观察各个地址的ram值,补丁对ram的操作是否有效在这里可以得到最直观的体现,对于能一目了然的东西我就不多说了,在这里说一下一些比较有用的东西:
1.ram窗口内右击->Monitor
这个表示实时监控ram值的变化,作用不用我多说了,弄补丁的应该都知道;
2.ram窗口右击->Watchpoint->Set watchpoint on write
这个表示在当前数据上设置一个观察点,可返回对此地址进行操作的函数,这个可以作为查找函数的一种方法.
关于调试窗口
1.点击CPU页以后,可以进入到当前rom的反汇编界面,通过右击->ARM/Thumb switch可以切换不同的反汇编状态;
2.右击->debug
此项可以在当前地址上设置一些东西,其中:
Set Breakpoint表示设置断点;
Set Fast Snappoint表示快速设置观察点,如果手机系统运行至当前地址时,会在左下角的窗口中返回所有的寄存器值,这对分析补丁是否能稳定工作以及相关寄存器值是否处理恰当是非常有帮助的,如下图:
Set Snappoint与Set Fast Snappoint类似,不过Set Snappoint更灵活,可以根据自己的需要进行相关的编辑,有选择的进行查看,从而得到自己需要的东西,如下图:
具体的编辑方法可以从弹出窗口的下方得到相关的说明.
(PS:对于观察点,建议不要设置过多,否则可能导致死机,而对于断点更是不能乱设,错误的断点会导致系统停止响应)
其它
还有一个比较重要的功能:Tools->Call adress
在这里可以直接指定函数的地址,通过点击Call按键即可直接调用此函数,其重要意义在于可以在手机上观察某些函数实现的效果.其中勾选Thumb表示被调用函数使用的是Thumb指令集,也可以在函数地址上+1进行指令集的切换,如M6C V50的GetDateTime,可以直接填入A0A73CE7之后Call,也可以填入A0A73CE6后勾选Thumb进行Call.下面的寄存器栏很显然是代表了各寄存器的传入参数.
(注意!错误的Call调用函数或者寄存器参数传入错误都有可能导致死机!)
=============================================================================
我所了解的基本上就这么多了,其功能当然远远不止这些,举例来说,通过分析SP的值来寻找相关的hook或函数就是一个特别重要的方法,但是我还不会,此外,还可以直接在debugger中直接进行汇编和调试,这个我也不懂,这些就大家一起共同来研究了
文档格式下载链接
Arm-debugger最新版本下载链接
[ 本帖最后由 starfriend 于 2006-7-8 10:32 编辑 ] |
|