解決V-KLAY打補丁時因為彼此覆蓋使升級失敗的問題
2024-06-08 15:06:57
供稿:網友
VKP補丁雖然可以對小八的功能進行補充,但是如果補丁打多了就有可能因為彼此不兼容或者是版本不對而產生覆蓋,使升級不成功。即使有的暫時正常使用,但如果在特定條件下使用到被非法覆蓋的部分是就會產生問題,使機器不穩定。下面是我的一點解決辦法,主要解決的是本來在ROM中應該是空的地方卻有了代碼的問題(也就是補丁中xxxxxx:FFFFFFFFFFFF->xxxxxxxxxxxx的部分),其表現為V-KLAY提示讀取的數據跟補丁里原始數據不符,如果這時選擇強行刷新,就會覆蓋原來的代碼,成為手機的不穩定因素。我的解決的方法是換到別的空白單元寫代碼。
下面是一個例子,手機的Flash版本是“6688-V55+25旋轉菜單中文版”,要打得補丁是“來電同時顯示姓名和電話號碼 ”,首先看一下原補丁的代碼:
=======================================
361E2F:D6B21C BF0005〈==原來的程序里要修改的代碼
1F0500:FFFFFFFFFFFFFFFF DAD6B21CE6FC1000 《=添加到空單元的代碼
1F0508:FFFFFFFFFFFFFFFF E6FF412CD7400C00
1F0510:FFFFFFFFFFFFFFFF F3F23D2C5C112D12
1F0518:FFFFFFFFFFFFFFFF CC00D7400C00A98F
1F0520:FFFFFFFFFFFFFFFF F13269312D027C44
1F0528:FFFFFFFFFFFFFFFF 08F166F40F00F0E4
1F0530:FFFFFFFFFFFFFFFF 46FE0F002D03BB04
1F0538:FFFFFFFFFFFFFFFF 29213DEFDB00FFFF
1F0540:FFFFFFFFFFFFFFFF 88C0881088F006FE
1F0548:FFFFFFFFFFFFFFFF 0D02E00DDAB304DF
1F0550:FFFFFFFFFFFFFFFF 98F0981098C008C6
1F0558:FFFF CB00
=============================================
如果這時候你讀取補丁再“Apply patch” V-KLAY就會警告讀取的內容與補丁數據不符合,如果強行就會埋下隱患。所以這里取消升級
下面就看一看flash里面是什么樣子,用W32dasm打開6688v55+25 bin文件,找到地址361E2F,如下
:00361E2E DAD6
:00361E30 B21C
從2F開始的單元為D6B21C與補丁文件相符,再找地址1F0500,如下
:001F04FE 05002C0805
:001F0503 002C09
......從1F0500開始已經有代碼了,不是FFFFF...的空單元了,所以才會報錯。
那么下面我們就開始動手做了。首先在W32dasm顯示的flash內容中就近(001F0500附近)找到足夠大小的空單元,容納1F0500到1F0558的內容,發現往上到001F0354附近有大片的空白單元(內容為FFFFFFFFFFFFFFFFF......)。
經計算1F0559-1F0500為59(16進制)個字節,從001F0354開始就已經有足夠的空間容納新添的代碼了,于是就從001F0354開始寫代碼(注意選開始地址數值要選擇雙數)。打開一個新的文本文件,按原補丁數據不變,僅將地址值改為新的對應值,如下:
1F0354:FFFFFFFFFFFFFFFF DAD6B21CE6FC1000
1F035c:FFFFFFFFFFFFFFFF E6FF412CD7400C00
1F0364:FFFFFFFFFFFFFFFF F3F23D2C5C112D12
1F036c:FFFFFFFFFFFFFFFF CC00D7400C00A98F
1F0374:FFFFFFFFFFFFFFFF F13269312D027C44
1F037c:FFFFFFFFFFFFFFFF 08F166F40F00F0E4
1F0384:FFFFFFFFFFFFFFFF 46FE0F002D03BB04
1F038c:FFFFFFFFFFFFFFFF 29213DEFDB00FFFF
1F0394:FFFFFFFFFFFFFFFF 88C0881088F006FE
1F039c:FFFFFFFFFFFFFFFF 0D02E00DDAB304DF
1F03A4:FFFFFFFFFFFFFFFF 98F0981098C008C6
1F03Ac:FFFF CB00
現在新代碼就改好了,可是還沒有完,補丁里面361E2F:D6B21C BF0005 中的BF0005也要作相應的變動。要怎么變呢?看看原來補丁里面就知道了0005其實就是原來地址1F0500里的0500,為什么要寫成0005而不是實際的0500呢?因為機器里面數值存儲是先存低位再存高位。于是就把BF0005改稱BF5403,這是我們的新地址,同樣要先低位后高位,至于BF是什么用的就先不管他了,猜想也是跳轉或條件處理什么的。當然如果代碼中還有其他的新地址相關的也要統統改過來。看看匯編代碼,不認識也可以猜出來。這樣,我們的新補丁就做好了,像這樣:
361E2F:D6B21C BF5403
1F0354:FFFFFFFFFFFFFFFF DAD6B21CE6FC1000
1F035c:FFFFFFFFFFFFFFFF E6FF412CD7400C00
1F0364:FFFFFFFFFFFFFFFF F3F23D2C5C112D12
1F036c:FFFFFFFFFFFFFFFF CC00D7400C00A98F
1F0374:FFFFFFFFFFFFFFFF F13269312D027C44
1F037c:FFFFFFFFFFFFFFFF 08F166F40F00F0E4
1F0384:FFFFFFFFFFFFFFFF 46FE0F002D03BB04
1F038c:FFFFFFFFFFFFFFFF 29213DEFDB00FFFF
1F0394:FFFFFFFFFFFFFFFF 88C0881088F006FE
1F039c:FFFFFFFFFFFFFFFF 0D02E00DDAB304DF
1F03A4:FFFFFFFFFFFFFFFF 98F0981098C008C6
1F03Ac:FFFF CB00
好了,把新的補丁拷貝到v-klay里面,或者文本文件保存,把擴展名改為.vkp就成了一個新的補丁文件了。現在再打這個補丁就不應該再提示不相符了,一路執行下來,開機,來電顯示就變成了既有人名也有電話號碼了,不過第一次會顯示全零,下一次就好了。如果通過這個方法打的補丁不好用,或者手機不正常,也可以通過undo patch恢復到以前的狀態,對手機不會有什么影響。
這個方法只適用于本來應該為空白的單元卻已經被寫了代碼了的情況;如果是修改代碼的部分(上面的361E2F:D6B21C BF5403)不相符,像上面改法在apply補丁的時候還會提示內容不符,這時敢不敢改就要看你自己了。