中文化ASCII字串的高級技巧

---Pascal語系字串(1)

作者: 梁瑞本

一、與C語系字串相比較

□□與C語系字串相比較,在Pascal語系字串中每個字串都可以至少增加3個字串 (3個字母) ,這對於中文化而言已經足夠了。很少情況下Pascal語系字串能夠增加更多的字串 (參見《梅花三弄》) 。Delphi所用的是Object Pascal語系,所以提示訊息為Pascal語系字串,格式在第一章也說,這裡就不重複了。

二、增加字串長度

□□以下以一個書籤工具AcqURL (V3.4英文版) 主執行檔案AcqURL.exe為例,這個程式是使用DELPHI來編寫的,我在這裡只舉出如何修改程式中的一個對話框提示作例子。這個提示是在執行選單中檔案-拷貝程式-拷貝到A 磁碟,而當A 磁碟沒有放入軟碟時出現 (圖1) ,

現在讓我們在提示前加上三個字串「YES」,目的是透過增加三個字節來說一下在DELPHI程式中增加字串的操作。讓我們現在用Uedit32 (任何一種十六進制編輯器都可以) 開啟這個程式來編輯,用尋找字串「Drive not responding!"來跳到我們要修改的提示訊息的位置 (圖2) ,

在這裡可以看到,在字串的前三個字節的ASCII值為00,前第四個字節是表示該提示訊息的實際長度的長度標識符,前第五至第八個共四個字串的ASCII值為FF,從這裡我們可以知道這是一個Pascal語系字串,由於我們這裡並沒有多餘的位置,所以要透過利用其它字串翻譯時多餘出來的位置是不可能的 (: Pascal語系字串大多數是在代碼段中,這在調試Delphi程式時可以看到,提示訊息並不是集中一起放到代碼段裡的,而是跟在需要顯示它的函數或功能返回代碼後面,如果一個函數或功能裡有兩個或兩個以上的提示訊息時,才會有連續的Pascal語系字串出現) 。所以只能在自身的代碼入手,在調試程式中發現,Pascal語系字串前第四至第八個ASCII值為FF的字節在程式中並不是執行代碼,本來可以用這四個FF字串來增加四個字串的,由於實際上程式需要有一個FF來作為字串標識,需要保留一個FF來作為標識符,所以實際只能增加3個字串。
□□首先把游標移到字串的首字串上 (圖3) ,

那麼在UEDIT32的狀態欄上就會顯示出這個字串在這個檔案中的偏移。記下這個字串的首字串在檔案中的十進制偏移「755980」 (圖4) ,

然後修改 (技巧: 請參看附1) 提示訊息為「YESDrive not responding!」 (註: 在這裡只是作為例子說說增加字串的技巧,增加的字串是隨意的) (圖5) ,

您可以比較一下修改前的圖片,這實際上是把前面的三個「FF」 替換掉了,而把字串向前移動了三個字串。在增加了「YES」後,整個字串的實際長度就改變了 (原本為15個字串) (注意: 檔案長度並沒有改變) ,增加了三個字串後,字串的實際長度是18個字串,所以要字串長度標識符改為正確的「12」 (字串長度標識符是字串實際長度的十六進制數) 。還有的就是這個字串的首字串在檔案中偏移改變了,那麼我們需人修改主調用偏移代碼,以使其正確調用字串。我們把游標移動到修改後的首字串上 (圖6) ,

把在UEDIT32的狀態欄出現的修改後的首字串偏移值「755977」記下來。
□□這需要使用代碼轉換器了,執行代碼轉換器,因為acqRUl是使用Delphi來編寫的程式,所以在代碼轉換器中要選取「DELPHI程式」檢查框 (圖7) 。

在十進制輸入框中輸入剛才記下的未修改前的首字串偏移值「755980」,那麼在代碼輸入框中就會出現計算出來的調用偏移代碼「0C954B00」。在UEDIT2中按下CTRL+F鍵調出尋找對話框,以十六進制字串方式尋找,在「尋找什麼」 中輸入用代碼轉換器計算出的的調用偏移代碼「0C954B00」,設定方向為「向上」 (圖8) ,

按下「下一個」,在檔案中找這個十六進制代碼 (技巧: 請參看附2) ,在離檔案頭偏移「754966」處找到了這個代碼 (圖9) ,

我們需要把它修改為修改後字串的偏移代碼。在代碼轉換器的十進制輸入框中輸入修改後的首字串偏移值「755979」,這樣在代碼轉換器中就計算出了新的調用偏移代碼「09954B00」 。把這個新調用偏移代碼替換原來的調用偏移代碼 (圖10) ,

修改好後儲存退出,執行程式AcpURL,在執行拷貝程式到A 磁碟時,出現提示框,看到增加的字串「YES」了嗎 ? ! ^_^ (圖11)

 

三、總結

□□增加PascalL語系字串的操作與VC差不多,重要的是把修改前字串的調用偏移代碼改為修改後字串的調用偏移代碼,這是整個操作的關鍵,並且可以用這個方法引申出更多中文化ASCII的技巧,如ASCII字串擷取器就可以利用調用偏移代碼來取得ASCII字串的位置,從而可以準確的擷取出需要中文化的提示訊息。能夠利用修改或尋找調用偏移代碼,完美中文化不再是問題了,

附1
□□在Delphi中增加ASCII字串長度時,可以先計算出需要增加多少個字節,然後選取包括字串長度標識符在內的提示訊息部分(圖12) ,

向上移動多少個字節,這樣就可以修改移到提示訊息後面的FF了 (圖13) 。


附2
□□一般DELPHI程式的調用代碼會在提示訊息的前數十個或數百個字節的範圍內,所以一般第一次找到的都會是正確的調用代碼。如果有找到兩個以上的話,只好自已測試那個正確了。

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



回教學