手機(jī)內(nèi)部的存儲(chǔ)空間是連續(xù)的,幾乎所有的信息,包括鈴聲,圖片,甚至內(nèi)置鈴聲和動(dòng)畫待機(jī)圖的名稱,都是用指針來實(shí)現(xiàn)調(diào)用的。我們備份文件的時(shí)候,按地址以此導(dǎo)出bin1,ogm1,bin2,ogm2,這四個(gè)文件的地址是連續(xù)的,導(dǎo)出文件時(shí)需指定地址,分別是:
BIN1:000000--6FFFFF
OGM1:700000--7FFFFF
BIN2:800000--C6FFFF
OGM2:C70000--最后
我們發(fā)現(xiàn),前一個(gè)文件的末地址,經(jīng)過十六進(jìn)制+1之后,就是下一個(gè)文件的首地址,由此不難得出,四個(gè)文件合起來就是手機(jī)內(nèi)部整個(gè)連續(xù)的存儲(chǔ)空間。
這就很容易解釋調(diào)用bin1,ogm1,bin2,ogm2中內(nèi)容的指針相對(duì)被調(diào)用內(nèi)容的地址(此處“地址”指用winhex之類的十六進(jìn)制編輯器打開四個(gè)文件之一時(shí)所看到的地址)分別需要加入0,700000,800000,C70000的增量了。因?yàn)槲覀冊(cè)谟檬M(jìn)制編輯器調(diào)用這四個(gè)文件的時(shí)候,四個(gè)文件的起始地址都是000000。所有文件內(nèi)的地址,都是對(duì)于文件頭的相對(duì)地址。對(duì)照備份四個(gè)文件時(shí)輸入的四個(gè)首地址,很容易看出,用十六進(jìn)制編輯器調(diào)用時(shí)的000000分別對(duì)應(yīng)了bin1的000000,ogm1的700000,bin2的800000,ogm2的C70000。因此這四個(gè)文件內(nèi)的地址在手機(jī)內(nèi)的真實(shí)地址就應(yīng)該是用十六進(jìn)制編輯器打開時(shí)看到的地址,加上這個(gè)文件在手機(jī)內(nèi)的首地址。簡單說來,我們?cè)赑C上,用十六進(jìn)制編輯器看到的是分別相對(duì)四個(gè)文件首地址的相對(duì)地址,而在手機(jī)內(nèi)部真正實(shí)現(xiàn)調(diào)用的時(shí)候,需要使用到的是相對(duì)手機(jī)內(nèi)部存儲(chǔ)空間起始地址的相對(duì)地址,兩個(gè)“相對(duì)地址”相對(duì)的000000并不一致。
做過DIY版本的人都知道確定調(diào)用bin1,ogm1,bin2,ogm2這四個(gè)刷機(jī)文件中內(nèi)容的指針時(shí),該指針分別要加入0,700000,800000,C70000的增量,原因就在這里了。
舉例來說,我們用十六進(jìn)制編輯器看到一個(gè)圖片或者鈴聲,又或者字串的地址是xxxxxx,那么如果它在bin1中,它在手機(jī)中的地址就是xxxxxx;如果它在ogm1中,那么它在手機(jī)中的地址就是xxxxxx+700000;如果它在bin2中,它在手機(jī)中的地址就是xxxxxx+800000;如果它在ogm2中,它在手機(jī)中的地址就是xxxxxx+C70000。指針?biāo)赶虻模莾?nèi)容在手機(jī)中的地址,這就是增量的由來了。
如果把四個(gè)文件首尾相接,連接成一個(gè)文件,那么這個(gè)文件里面所有內(nèi)容的地址就和它們?cè)谑謾C(jī)里面所占的地址完全一致,這時(shí)指針?biāo)傅牡刂,就是文件?nèi)的相對(duì)地址了,也不再存在增量的問題。當(dāng)然,這么做比我們現(xiàn)在使用的加入增量來實(shí)現(xiàn)調(diào)用的方法更不方便,這樣只是為了用一個(gè)文件來模擬手機(jī)內(nèi)的信息存放,因?yàn)槲艺J(rèn)為,刷機(jī)文件分成四個(gè)部分來dump只是為了配合刷機(jī)軟件downloader 3.2分四個(gè)文件刷入的模式,而刷入機(jī)器內(nèi)部之后,四個(gè)文件其實(shí)就重新連接成了一個(gè)大文件。
20:36 2004-8-20