欢迎来到天天文库
浏览记录
ID:14343654
大小:200.76 KB
页数:7页
时间:2018-07-28
《如何汉化软件中的字符串》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第一篇:关于ASCII字符串一、ASCII字符串的定义和简介ASCII字符串--在汉化界里,把在一个程序中不能使用资源方式来提取的,但是在运行时会显示出来的提示信息称为ASCII字符串(一般称为ASCII码)。在汉化软件过程中,ASCII字符串的汉化一直是最麻烦和最容易出错的地方,这是由于ASCII字符串一般都分布在程序中的代码段或数据段里,不属于资源部分,不能使用标准的资源提取工具提取出来。由于程序执行代码也在代码段里,并且字符串往往并不是集中固定在某一个地方,所以很难分辨是否为需要翻译的字符串
2、。ASCII字符串一般划分为C语言字符串和Pascal语言字符串:1、C语言字符串指的是在字符串前后都有一个ASCII码为“00”的字符来与其它代码区分开来(图1):如:0069736B2E00(disk)。C语言字符串主要出现在程序的数据段部分。一般用C语言编写的程序(注:典型的是用VC++来编写的程序)最多C语言字符串。由于C语字符串在数据段里往往会集中一处,所以查找起来比较方便。2、Pascal语言字符串只有用Pascal语言来编写的程序才有(注:Delphi就是使用ObjectPascal
3、语言)。是指字符串后面不但有至少一个ASCII值为“00”的字符分开,且在字符串第一个字符前三个字符都是00,在前第四个字符是该字符串的长度标识符,前第五、六、七,八个字符是ASCII码值为“FF”的字符,如:FFFFFFFF02000000C4E3(图2)。有这么多的特点,判断是否为ASCII字符串比起C语言字符串容易多了,不过由于Pascal语字符串分布在整个代码段里,所以查找起来就比较难了。二、汉化时遇到的问题由于ASCII字符串在代码段或数据段中,所以汉化ASCII字符串有其的特殊性:一、
4、要保证程序的运行,就不能增加程序文件的大小,也就是不能直接增加ASCII字符串的长度,否则程序就会出错而不能正常运行。二、难以判断是否为可翻译或需要翻译的字符串。鉴于ASCII字符串的特殊性,所以目前汉化ASCII字符串时,绝大多数都是使用十六进制编辑器来手动修改,不但汉化需要的时间长,并且很容易出错,一个字--烦!三、ASCII字符串提取工具的介绍和分析难道就没有一个程序可以用来自动提取ASCII码吗?当然有了,但是目前汉化界的所有ASCII码提取工具都是基于一种提取方法,使用的判断条件大都是:
5、字符串全是字母或数字,字符串前后都有值为00的字符,字符串要有一定的长度,高级一点的提取工具会设置不提取包含某些字符的字符串(这样可以除去一部份不需要翻译的字符,如WIN32API函数,但有时反而不提取不到应该提取的ASCII字符串),更高级的提取工具可以判断字符串是否为英文单词,并且可以设置要提取的字符串中包含英文单词的数量,提取的范围固定在代码段和数据段里(这样提取出来的字符相对准确,可以除去WIN32API函数以及一些代码。是所有判断方法中准确性最高的一种,但是编写程序的难度大,提取速度慢,
6、因为要有一个英文库,所以此类的提取工具很少)。在提取时,如果满足所有提取条件的字符串,就提取出来。虽然这样,但结果还是只有很少的汉化高手使用,原因是提取效果还是差强人意。以及最重要的是不能增加字符串长度。四、如何增加ASCII字符串的长度要是按修改资源的方法来增加字符串长度是不行的,因为那样虽然增加了字符串的长度,但是文件长度也增加了,也就是代码或数据的位置改变了。那么,程序运行时就会产手错误,而使汉化告败。可见,增加字符串的长度,是首先要保证程序可以正常运行,所以不修改程序的长度,而是修在程序内
7、部利用一些空余的位置来放罢新增的字符,由于C语言字符串和Pascal语言字符串不同,所以把增加字符串的技巧分为四章,第一章写的一般情况下增加C语言字符串的长度,第二章是写在比较特殊的情况下使用的技巧,第三章是增加Pascal语言字符串的长度的技巧,第四章则是在比较特殊的情况下使用的方法,在看完四章后,相信你汉化软件时,对ASCII字符串一定能更完美地汉化,而不是以前的“是”或“否”了。五、要了解的知识在这里,我将介绍一下增加ASCII字符串长度的主要原理,以及将使用一个辅助计算的小工具:代码转达换
8、器。在WIN32程序中,显示一个提示信息都是通过调用API来完成的,调用的时候,会先把字符串在内存中的偏移地址移到一个寄存器中,然后调用API函数,而API函数根据偏移地址找到字符串在内存中的位置。我们在调试一个程序时就可看到(图3):这是用在调试DELPHI程序时的一个函数MessageDlg,由上面我们可以看到,字符串在内存中的地址是固定的,其地址在编译时就已经以代码的形式存放到文件中,那么我们可不可以通过修改这个偏移代码来使其显示另一个字符串呢?事实证明是可以的,这就是汉化A
此文档下载收益归作者所有