马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
让我们比较一下进行西门子手机Patch和Windows可执行文件(Pe)Patch的比较:
[upload=gif]UploadFile/20044191234258711.gif[/upload]
以蓝底标示的是进行手机Patch的劣势,而以绿底标示的则是优势。
对Siemens Mobile phone pathch进行反汇编,IDA几乎是不二之选,毕竟C166的Cpu并不常见,反编译工具很少。
IDA的4.30版以上具有对C166的反编译功能,不过IDA的身材有些大,4.30以上的版本也不太好找。KoncaCN在他的主页上放上了IDA4.30 For C166的专用版,身材只有2M。
请大家自已到这个页面中下载:
IDA 4.30 For C166专用版:http://www.konca.com/mobile/6688i/index.html
在使用IDA打开我们的FullFlash之后会出现下面的对话框:
[upload=gif]UploadFile/200442612544639547.gif[/upload]
如果我们使用的是For C166的专用版,那么只需要将“Rename Dll entries”的选中去掉就可以了,否则,还需要选出合适的处理器类型。
OK之后我们会看到内存组织对话框:(依据S57填写)
[upload=gif]UploadFile/200442612554163162.gif[/upload]
在这个对话框中使用黄色标注的是我们需要设置的地方。为什么需要这样设定呢?MrJewes在他的http://www.36518.com/sjpd/bbs/dispbbs.asp?boardID=43&ID=9154一文中已经说得很清楚。在下一篇《C166 cpu基本知识》中我会对相关知识做一些更详细的说明,这里只是简单说一下数据是如何来的。
S57的FullFlash有12M,换算成16进制数就是C0.0000(我使用.作为4位16进制数的分割符)。C166的CPU有16M(100.0000)的寻址能力,为了便于管理和升级,Siemens将RAM放置于地址的前端,ROM放在地址的后端,所以我们应该将取得的FullFlash做一下寻址变换,也就是在FullFlash前面填充16-12=4M的RAM区域。那么这是不是意味着S57拥有4M的RAM存贮器呢?并不是这样,在RAM和ROM之间还有一段空白区域,CPU可以对这一段区域寻址,但是并没有真正的存贮器与它对应。我们填写4M的RAM的主要目的是为了将ROM的地址从文件地址变换到CPU寻址地址,也就是加上40.0000H。至于ROM的大小,IDA会依据文件来设定,不需要我们手工填写了。
M55的FullFlash有14M,那么我们怎么设定呢?请大家自已练习一下。本篇的最后,我将给出相应的设置,对比一下,看你有没有正确填写?
再次确认后,IDA就开始辛勤工作了。等IDA反编译成功,IDA会显示八个子窗体,其中对我们最为有用的是IDA View-A,Hex View及Strings窗体。其它的我们可以将它关闭。
[upload=gif]UploadFile/20044271358540084.gif[/upload]
让我们转到Hex View页,拖动滚动条,你一定能看到下面的画面(依据M55V11。Sorry S57的朋友,单位只有M55的FullFlash,不过应该能很容易的转到S57上去)
为什么20.0000H之前都是问号呢?这是因为20.0000以前的地址都是RAM,正是我们在内存组织页中填写的内容。由于RAM在实际运行之前是不可知的数据,所以IDA为我们填写了?号作为标识。
从20.0000H开始的内容就是我们在FullFlash中的内容,大家不妨自已比较一下。结合我们在内存组织页中填写的内容,我们很容易知道:IDA中显示的地址(CPU寻址地址)=文件地址+20.0000H。当然这个20.0000H是针对M55来说的,S57这一值是40.0000H。
IDA在20.0000H以前的地址使用了类似于Seg031:FFF0这样的段式组织方式,一个段的长度是10000H。依据上图,M55的内存(RAM,注意并不是真正的RAM区域,而是RAM+空白地址空间)有32(注意这里是10进制,以后没有加H的均表示10进制)个段,所以长度为32*1.0000H=20.0000。
[此贴子已经被作者于2004-4-27 13:58:49编辑过]
|