手机内部的存储空间是连续的,几乎所有的信息,包括铃声,图片,甚至内置铃声和动画待机图的名称,都是用指针来实现调用的。我们备份文件的时候,按地址以此导出bin1,ogm1,bin2,ogm2,这四个文件的地址是连续的,导出文件时需指定地址,分别是:
BIN1:000000--6FFFFF
OGM1:700000--7FFFFF
BIN2:800000--C6FFFF
OGM2:C70000--最后
我们发现,前一个文件的末地址,经过十六进制+1之后,就是下一个文件的首地址,由此不难得出,四个文件合起来就是手机内部整个连续的存储空间。
这就很容易解释调用bin1,ogm1,bin2,ogm2中内容的指针相对被调用内容的地址(此处“地址”指用winhex之类的十六进制编辑器打开四个文件之一时所看到的地址)分别需要加入0,700000,800000,C70000的增量了。因为我们在用十六进制编辑器调用这四个文件的时候,四个文件的起始地址都是000000。所有文件内的地址,都是对于文件头的相对地址。对照备份四个文件时输入的四个首地址,很容易看出,用十六进制编辑器调用时的000000分别对应了bin1的000000,ogm1的700000,bin2的800000,ogm2的C70000。因此这四个文件内的地址在手机内的真实地址就应该是用十六进制编辑器打开时看到的地址,加上这个文件在手机内的首地址。简单说来,我们在PC上,用十六进制编辑器看到的是分别相对四个文件首地址的相对地址,而在手机内部真正实现调用的时候,需要使用到的是相对手机内部存储空间起始地址的相对地址,两个“相对地址”相对的000000并不一致。
做过DIY版本的人都知道确定调用bin1,ogm1,bin2,ogm2这四个刷机文件中内容的指针时,该指针分别要加入0,700000,800000,C70000的增量,原因就在这里了。
举例来说,我们用十六进制编辑器看到一个图片或者铃声,又或者字串的地址是xxxxxx,那么如果它在bin1中,它在手机中的地址就是xxxxxx;如果它在ogm1中,那么它在手机中的地址就是xxxxxx+700000;如果它在bin2中,它在手机中的地址就是xxxxxx+800000;如果它在ogm2中,它在手机中的地址就是xxxxxx+C70000。指针所指向的,是内容在手机中的地址,这就是增量的由来了。
如果把四个文件首尾相接,连接成一个文件,那么这个文件里面所有内容的地址就和它们在手机里面所占的地址完全一致,这时指针所指的地址,就是文件内的相对地址了,也不再存在增量的问题。当然,这么做比我们现在使用的加入增量来实现调用的方法更不方便,这样只是为了用一个文件来模拟手机内的信息存放,因为我认为,刷机文件分成四个部分来dump只是为了配合刷机软件downloader 3.2分四个文件刷入的模式,而刷入机器内部之后,四个文件其实就重新连接成了一个大文件。
20:36 2004-8-20
新闻热点
疑难解答
图片精选