一种对软件中的数据进行替换的方法

文档序号:6560981阅读:240来源:国知局
专利名称:一种对软件中的数据进行替换的方法
技术领域
本发明涉及软件编程技术,具体地说,涉及一种对软件中的数据进行替换的方法。
背景技术
计算机软件中包括操作命令和数据。软件开发商编制软件时,经常存在许多彼此功能基本相同的软件,这些软件执行功能基本相同,因此具有相同的操作命令,但是,同样的操作命令所操作的数据对象往往并不相同。针对上述情况,软件开发厂商为避免重复工作,采取了一些措施实现对同一个软件的数据部分进行替换,以便使同一个软件能够为反复使用。
例如,现有技术中一种广泛使用的替换方式是利用外部软件进行替换。对应于可替换软件,外部软件中具有相应的资源索引。当需要读取可替换软件中的可替换数据时,只需要调取相应的外部软件,根据所述索引获得对应的数据即可。例如可替换软件A,其可替换数据为显示字符a,b,c,对应的索引为001,002,003,外部软件为B,C,分别是中文版和英文版的,B中索引001代表“我”,002代表“你”,003代表“他”,C中索引001代表“me”,002代表“you”,003代表“him”。当需要读取该可替换软件中的可替换内容a,b,c时,只需根据对语言的选择而调用B或C即可。上述现有技术的缺陷在于,这种替换方式是在源程序中实现的,而程序最终需要编译成为二进制形式的可执行文件才能执行,因此,这种替换方式需要对程序重新进行编译,不能直接利用已经编译完成的二进制文件,造成了资源和时间的浪费。
在Windows环境下进行资源数据的替换工作时,开发人员通常基于Resource Hack的原理来完成,Resource Hack的原理为在Windows环境下,软件中的二进制文件是PE格式的,读取二进制文件后,可以对其中特定的数据进行解析、拆分。基于该原理,Resource Hack可以直接查看、修改软件的菜单、对话框、字符串表等数据资源。但Resource Hack只能用来替换与操作界面相关的数据,而且只能针对PE格式的二进制文件。因此,这种方式有很大的局限性。

发明内容
针对上述缺陷,本发明解决的技术问题在于,提供一种可以自定义可替换内容并且直接对二进制文件进行数据替换的对软件中的数据进行替换的方法。
本发明一种对软件中的数据进行替换的方法,包括以下步骤11)编译获得可替换数据设置有标识的二进制文件;12)根据所述标识,检索获得可替换数据在二进制文件中的位置;13)根据所述可替换数据在二进制文件中的位置,将所需数据替换原数据。
优选地,所述步骤11)包括在编制源程序时,将所述标识与可替换数据在源程序语句上相连结;编译所述源程序,获得可替换数据设置有标识的二进制文件。
优选地,所述标识是自定义的由多个字节组成的字符串,或者是自定义的由一定长度的数据组成的标识串。
优选地,所述标识具有全局唯一性。
优选地,所述具有全局唯一性的标识具体是采用全局统一标识符自定义的标识。
优选地,所述可替换数据为多个,每个可替换数据分别具有各自独立的全局统一标识符作为标识。
优选地,所述可替换数据为多个,其中连续的可替换数据可以采用同一个全局统一标识符作为标识。
优选地,所述可替换数据与全局统一标识符的关系可采用一个对照表来记录。
优选地,所述步骤12)包括打开带有可替换数据标识的二进制文件;读取所述二进制文件,并在该文件中检索所述可替换数据的标识;根据所述获得的标识,确定可替换数据在该二进制文件中的位置。
本发明的基本思路是,对于二进制文件中需要替换的数据,采用特定标识表示出其在二进制文件中的长度和位置。当需要替换时,则根据该标识获得所要替换的数据在二进制文件中的长度和位置,进行所述替换。所述的标识可一次采用全局统一标识符进行替换。
与现有技术相比,本发明提供的技术方案可以直接针对二进制文件进行数据替换,而无需在源程序中进行,这样就免去了重新进行编译的过程;也适用于使用者需要进行数据替换,而程序开发者不希望其获知源程序的场合。相比与采用Resource Hack原理进行替换的方式,该方法不受二进制文件的格式的限制,也不受数据内容的限制。


图1是本发明第一实施例的总体流程图;图2是本发明第一实施例的标准软件的二进制编码文件;图3是本发明第一实施例步骤S1的流程图;图4是本发明第一实施例步骤S2的流程图;图5是本发明第一实施例进行数据替换后获得的二进制编码文件。
具体实施例方式
本发明提供的软件数据替换方法,其基本思路是在标准软件中,采用全局惟一的标识标记需要替换的数据,通过该标识可以定义该数据在二进制文件中的位置和长度。需要生成替换软件时,根据二进制文件中设置的所述标识,查找到需要替换的数据,并且使用新的数据替换所述数据。
请参看图1,为本发明第一实施例的总体流程图。
如图1所示,该实施例提供的方法包括两大步骤步骤S1,编译可替换数据带有标识的二进制文件。
步骤S2,根据二进制文件中的所述标识进行数据替换。
为了方便进行说明,现在结合一个在屏幕上输出“Hello World!”的程序说明该实施例。以下为该程序的源程序,图2为该程序编译后获得的二进制编码文件,以及以ASCII码读取该二进制编码的内容。
//Replace.cpp:Defines the entry point for the console application...........1// 2#include″stdafx.h″3
#include<Windows.h> 4typedef struct_ES_REPLACE_DATA5{ 6GUID Loc_flag;7DWORD ulStructSize; 8char szString[40];9}ES_REPLACE_DATA; 10ES_REPLACE_DATA ReplaceData= 11{ // GUID Loc_flag; 12//{CD6A1906-400B-46c2-9DCB-918C135BA910} 13{0xcd6a1906,0x400b,0x46c2,0x9d,0xcb,0x91,0x8c,0x13,0x5b,0xa9,0x10},14//DWORD ulStructSize; 15sizeof(ES_REPLACE_DATA), 16// string to print; 17(″Hello World!\n″), 18};19int main(int argc,char*argv[])20{ 21printf(ReplaceData.szString); 22return 0; 23} 24该程序中,需要在屏幕上输出的“Hello World!”是需要替换的数据。也就是说,希望还可以利用该程序的二进制文件,直接将所述的“Hello World!”在屏幕上输出。
如图3所示,该图为步骤S1的具体步骤。以下结合该流程图进行说明。为了更加方便的说明,该实施例是对应于上述程序提供的。
步骤S101,确定需要替换的可替换数据。
在该例中,可替换数据是在屏幕上输出的字符串“Hello World!”。
步骤S102,确定自定义标识。
所述自定以标识需要具有全局唯一性,以免与其他数据混淆,具体可以利用全局统一标识符GUID获得可替换数据“Hello World!“的标识。在本实施例中,通过使用全局统一标识符函数GUID获得源程序中的字符串CD6A1906-400B-46c2-9DCB-918C135BA910。全局统一标识符的英文是Globally Unique Identifier,缩写为GUID。该标识符由一个特殊的算法产生128位的数,采用该种算法可以保证不产生重复的标识。这样就可以避免由于标识重复而发生错误的替换。
步骤S103,在编写源代码时,在可替换数据的代码前写入自定义标识符。具体到上述实际程序,就是在可替换字符串“Hello World!”的代码前写入自定义标识符“CD6A1906-400B-46c2-9DCB-918C135BA910”作为自定义标识。
在源程序的第5到第10行,定义一个数据类型ES_REPLACE_DATA,该数据类型包括三个数据,数据1是全局统一标识符;数据2是一个双字节类型,标识本数据的长度;数据3是字符类型。
在源程序的第11到第19行,使用上述数据类型ES_REPLACE_DATA定义变量ReplaceDate,并为该变量赋值。其中,第14行程序就是全局统一标识符“CD6A1906-400B-46c2-9DCB-918C135BA910”。第18行内容是需要打印的“Hello Word!”。这个源程序被编译后,其二进制码就会在所述的需要替换的内容“Hello World!“之前出现全局统一标识符“CD6A1906-400B-46c2-9DCB-918C135BA910”。只要在源程序中,全局统一标识符能够与可替换数据连接,编译为二进制码后,两者的二进制码就会连接,产生标识作用。
步骤S104,编译代码,生成二进制形式的标准软件。
在编译代码时,源程序中定义变量ReplaceDate的程序段会被逐行编译,这样,在编译后的二进制文件中,所述的全局统一标识符“CD6A1906-400B-46c2-9DCB-918C135BA910”就会在需要可替换数据“Hello World!”之前出现。
如图2所示,在二进制文件中,“CD6A1906-400B-46c2-9DCB-918C135BA910”之后,紧接着出现可替换数据“Hello World!”的ASCII码符号。经过上述处理获得二进制形式的标准软件中,就能够通过所述标识符识别需要替换的内容。在所述二进制文件中,因为在存储时低位在前,高位在后,而显示时是高位在前,低位在后,所以所述全局统一标识符看上去与源程序中的全局统一标识符的数据位有交错,但实际上是一致的。
以下说明步骤S2,即根据二进制文件中的标记进行数据替换的步骤。假设采用“Replace String”替换“Hello World!”。请参看图4,为该步骤的流程图。
步骤S201,打开并读取上述标准软件的二进制文件。
步骤S202,在二进制文件中检索自定义标识,在所述的程序中,该标识就是全局统一标识符CD6A1906-400B-46c2-9DCB-918C135BA910。
由于CD6A1906-400B-46c2-9DCB-918C135BA910是不可能重复的全局统一标识符,因此,该二进制文件中必然只有一个位置存在该变量,只要检索到该变量,就必然是标识符。
步骤S203,根据检索获得的全局统一标识符的位置,确定可替换数据位置。
由于编译标准软件时,该字符串标记和可替换内容之间的位置关系已经确定,因此,检索获得所述全局统一标识符CD6A1906-400B-46c2-9DCB-918C135BA910的位置后,就可以获得所述可替换数据的位置。
步骤S204,根据所确定的可替换数据位置,将替换数据“Replace String”替换原二进制文件中可替换内容“Hello World!”,得到替换软件。
图5示出该替换后获得的二进制文件编码文件。其中,原来“HelloWorld!”的位置上已经由“Replace String”替换。
上述实施例中,只是对一个数据变量替换的过程,实际上,可能存在多个替换变量。可以将标准软件中对应各个可替换数据的全局唯一标识符记录在一个数据库文件中供需要替换时检索使用。这样,就可以建立全部的全局唯一标识符与可替换数据的对应关系表,当需要进行数据替换时,根据该表检索获得需要替换的数据对应的全局惟一标识符,从而进行所述替换。
应当说明,一个全局唯一标识符可以对应于一个可替换数据,也可以对应于多个连续的可替换数据,只要这些连续数据需要一起被替换,就可以采用同一个全局唯一标识符。对于分散的可替换数据,则必须为每一个数据设置专门的全局唯一标识符。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种对软件中的数据进行替换的方法,其特征在于,包括11)编译获得可替换数据设置有标识的二进制文件;12)根据所述标识,检索获得可替换数据在二进制文件中的位置;13)根据所述可替换数据在二进制文件中的位置,将所需数据替换原数据。
2.根据权利要求1所述的方法,其特征在于,所述步骤11)包括在编制源程序时,将所述标识与可替换数据在源程序语句上相连结;编译所述源程序,获得可替换数据设置有标识的二进制文件。
3.根据权利要求1所述的方法,其特征在于,所述标识是自定义的由多个字节组成的字符串,或者是自定义的由一定长度的数据组成的标识串。
4.根据权利要求3所述的方法,其特征在于,所述标识具有全局唯一性。
5.根据权利要求4所述的方法,其特征在于,所述具有全局唯一性的标识具体是采用全局统一标识符自定义的标识。
6.根据权利要求5所述的方法,其特征在于,所述可替换数据为多个,每个可替换数据分别具有各自独立的全局统一标识符作为标识。
7.根据权利要求5所述的方法,其特征在于,所述可替换数据为多个,其中连续的可替换数据可以采用同一个全局统一标识符作为标识。
8.根据权利要求6或者7所述的方法,其特征在于,采用一个对照表,记录所述可替换数据与全局统一标识符的关系。
9.根据权利要求1或2所述的方法,其特征在于,所述步骤12)包括打开带有可替换数据标识的二进制文件;读取所述二进制文件,并在该文件中检索所述可替换数据的标识;根据所述获得的标识,确定可替换数据在该二进制文件中的位置。
全文摘要
本发明公开了一种对软件中的数据进行替换的方法,该方法对于二进制文件中需要替换的数据,采用特定标识表示出其在二进制文件中的长度和位置,当需要替换时,根据该标识获得所要替换的数据在二进制文件中的长度和位置,进行所述替换,通过本发明提供的技术方案可以直接针对二进制文件进行数据替换,而无需在源程序中进行,这样就免去了重新进行编译的过程。该方法还适用于使用者需要进行数据替换,而程序开发者不希望其获知源程序的场合。
文档编号G06F9/45GK1949175SQ20061011429
公开日2007年4月18日 申请日期2006年11月3日 优先权日2006年11月3日
发明者陆舟, 于华章 申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1