·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> Delphi汉化 >> 汉化ASCII字符串的高级技巧---Pascal语言字符串(1)    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

汉化ASCII字符串的高级技巧---Pascal语言字符串(1)

作者: 梁瑞本 来源:汉化教学 时间:2003-08-06 点击:11346

汉化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)

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): ASCII 非标 Pascal

·上一篇: 路漫漫其修远兮--汉化新人容易犯的几个毛病 ·下一篇: 汉化ASCII字符串的高级技巧---Pascal语言字符串(2)

· 版权申明: 本文引自《汉化教学》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《汉化教学》[ 作者: 梁瑞本],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号