中文化ASCII字串的高級技巧

---C語系字串(1)

作者: 梁瑞本

 

一、前言

□□在一般情況下,英文翻譯成中文後的字節數會比原來英文的字節數少,也就沒有不夠位置 (註: 這裡指的位置是指在程式可以正常執行下,可以修改的字節數,以下同 ! ) 來回寫的問題,但是當英文為「YES」而需要譯成「確定」時,「NO」譯成「取消」時,那麼就會因「確定」比「YES」多一個字節、「取消」比「NO」多兩個字節而不夠位置來回寫,只能譯成「是」或譯成「算」 (意思是「算了」也就是取消的意思 ^_^) ,這樣看起來總讓人彆扭,那麼有沒有方法來增加位置,以下就是對C語系字串進行增加字串長度的詳述,C語系字串的特點是一般可以增加10個字節以上,只要位置足夠,就可以任意增加字串長度,而操作難度不會增加。但是當沒有位置時,雖然現在有相應的解決方法,但是操作難度就大大增加了,這將在下一篇裡介紹。

二、增加字串的例子

□□讓我們用Uedit32開啟一個用VC來編寫的程式Recover 4 all (圖1) ,

我們可以看到在該程式中已有一個ASCII字串翻譯了,在翻譯後由於譯文比原英文的字節少,把多出來的字節用00來填空 (指ASCII值為00) ,大家如果看了上一章就會明白,這是一個C語系字串 (目前只分為C語系符串和Pascal語系字串兩種,所以不是Pascal語系字串就可以斷定為C語系字串) ,讓我們來試一下增加字串的長度,在「File(s) were recovered to:」前加上「這個是證明了可以增加字串」共24個字節 (圖2) ,

保存檔案後讓我們試執行這個程式,當在程式中保存檔案時就會調用一個對話框來顯示這個字串 (圖3),

雖然程式並沒有出錯,但並不如想像中顯示出我們所增加的字串。我們現在知道了直接增加長度是不行的,那麼是什麼原因不能顯示增加的字串呢 ? 在上一章中,我們講述了在程式調用一個提示訊息時就會先把字串的偏移地址移到暫存器中,再調用顯示函數,剛才由於增加了字串,所以要顯示的字串的首字偏移改變了,而在程式中的相對應調用字串的偏移地址還沒有改變,所以調用顯示函數時還是原來的的偏移代碼,顯示的還是原來的字串,那麼是否修改字串的偏移代碼為增加後的偏移代碼就可以顯示增加的字串了呢 ? 那麼我們試試修改字串的偏移代碼,看一看是否可行 !
□□這次需要用我編寫的一個代碼轉換器 (圖4) ,

是用來在十進制、十六進制以及調用偏移代碼 (調用字串的偏移地址代碼,下同) 之轉換之用。在十進制輸入框中輸入的是ASCII字串首字串在檔案中的十進制偏移地址,十六進制輸入框是則是輸入對應的十六進制的偏移地址。當您輸入後,在調用代碼框就會計算出要尋找的調用代碼 (具體的使用在增補篇中詳細講述) 。好了,現在我們試用一下,把在Uedit32中,把游標移到首字串處 (圖5) ,

那麼在UEDIT32下面的狀態欄中就會顯示出這個字串在檔案中的十六進制和十進制偏移地址。 (圖6)

在代碼轉換器中的十進制輸入框中輸入該字串首字串在檔案中的十進偏移「323592」 (圖4) 或者在十六進制輸入框中輸入十六進制偏移「4F008」,在調用偏移代碼輸入框就會有計算出來的調用偏移代碼「08F04400」 (圖4) 。在UEDIT32中按下CTRL+F鍵調出尋找對話框 (圖7) ,

在「尋找什麼」輸入框中輸入在代碼轉換器的調用偏移代碼輸入框中所顯示的調用偏移代碼「08F04400」,以十六進制方式尋找 (就是不要選取「尋找ASCII字串」檢查框) ,尋找方向設定為「向上」,按「下一個」開始尋找。在離檔案頭「74309」處找到這個字串 (圖8) ,

記下這個偏移,回到剛才的字串中,記下增加後字串後的實際偏移「323568」 (十進制值) (圖9) ,

用代碼轉換器求出調用代碼為「F0EF4400」 (圖10) ,

把這個代碼替換原來的調用偏移代碼 (圖11) ,

保存檔案,試執行軟體,但是只是和剛才一樣 (圖3) ,

還是沒有顯示出增加的字串。也就是說剛才修改的不是這個對話框的調用偏移代碼,那麼再次開啟檔案 (不用恢復備份檔案,因為這個字串偏移代碼可能是另一個對話框使用的) ,重新向上繼續尋找,在偏移68898又找到這個字串了 (圖12) ,

像剛才那樣修改調用偏移代碼 (圖13) 。

重新執行程式,在保存檔案時終於出現了新增的字串 (圖14) ,比較一下未增加字串前的 (圖3) 。

 

三、可以增加字串長度的前提□□

□□由剛才的例子可以看出,只要可以把調用字串的偏移代碼修改為增加字串後正確調用代碼就可以了,但是前提是有足夠的ASCII碼值為00的字串用來替換,由於VC程式把字串集中放到代碼段中,所以可以使用在翻譯其它字串時留下的00位置來增加字節。當完全沒有多餘的位置時,那麼就需要更高級的修改方法來增加字串長度,這將在下一篇裡專門寫這一高級修改方法操作。

下載本篇所講到的軟體:
    未修改前的
Recover 4 all
    修改後的
Recover 4 all

下一章:中文化ASCII字串的高級技巧---C語系字串(2)



回教學