CN100533383C - 一种对软件中的数据进行替换的方法 - Google Patents

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

Info

Publication number
CN100533383C
CN100533383C CNB2006101142950A CN200610114295A CN100533383C CN 100533383 C CN100533383 C CN 100533383C CN B2006101142950 A CNB2006101142950 A CN B2006101142950A CN 200610114295 A CN200610114295 A CN 200610114295A CN 100533383 C CN100533383 C CN 100533383C
Authority
CN
China
Prior art keywords
data
sign
replaceable
binary file
replaceable data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CNB2006101142950A
Other languages
English (en)
Other versions
CN1949175A (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Beijing Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Feitian Technologies Co Ltd filed Critical Beijing Feitian Technologies Co Ltd
Priority to CNB2006101142950A priority Critical patent/CN100533383C/zh
Publication of CN1949175A publication Critical patent/CN1949175A/zh
Application granted granted Critical
Publication of CN100533383C publication Critical patent/CN100533383C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种对软件中的数据进行替换的方法,该方法对于二进制文件中需要替换的数据,采用特定标识表示出其在二进制文件中的长度和位置,当需要替换时,根据该标识获得所要替换的数据在二进制文件中的长度和位置,进行所述替换,通过本发明提供的技术方案可以直接针对二进制文件进行数据替换,而无需在源程序中进行,这样就免去了重新进行编译的过程。该方法还适用于使用者需要进行数据替换,而程序开发者不希望其获知源程序的场合。

Description

一种对软件中的数据进行替换的方法
技术领域
本发明涉及软件编程技术,具体地说,涉及一种对软件中的数据进行替换的方法。
背景技术
计算机软件中包括操作命令和数据。软件开发商编制软件时,经常存在许多彼此功能基本相同的软件,这些软件执行功能基本相同,因此具有相同的操作命令,但是,同样的操作命令所操作的数据对象往往并不相同。针对上述情况,软件开发厂商为避免重复工作,采取了一些措施实现对同一个软件的数据部分进行替换,以便使同一个软件能够为反复使用。
例如,现有技术中一种广泛使用的替换方式是利用外部软件进行替换。对应于可替换软件,外部软件中具有相应的资源索引。当需要读取可替换软件中的可替换数据时,只需要调取相应的外部软件,根据所述索引获得对应的数据即可。例如:可替换软件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>                4
typedef struct ES_REPLACE_DATA     5
{                                  6
  GUID Loc_flag;                   7
  DWORD ulStructSize               8
  char szString[40];               9
}ES_REPLACE_DATA;                 10
ES_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;                     15
  sizeof(ES_REPLACE_DATA),                    16
  //string to print;                           17
  ("Hello World!\n"),                         18
};                                             19
int main(int argc,char*argv[])                  20
{                                               21
  printf(ReplaceData.szString);                22
  return0;                                     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”替换。
上述实施例中,只是对一个数据变量替换的过程,实际上,可能存在多个替换变量。可以将标准软件中对应各个可替换数据的全局唯一标识符记录在一个数据库文件中供需要替换时检索使用。这样,就可以建立全部的全局唯一标识符与可替换数据的对应关系表,当需要进行数据替换时,根据该表检索获得需要替换的数据对应的全局唯一标识符,从而进行所述替换。
应当说明,一个全局唯一标识符可以对应于一个可替换数据,也可以对应于多个连续的可替换数据,只要这些连续数据需要一起被替换,就可以采用同一个全局唯一标识符。对于分散的可替换数据,则必须为每一个数据设置专门的全局唯一标识符。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (8)

1、一种对软件中的数据进行替换的方法,其特征在于,包括:
11)采用具有全局唯一性的标识标记可替换数据,编译获得可替换数据中设置有标识的二进制文件;
12)根据所述标识,检索获得可替换数据在二进制文件中的位置;
13)根据所述可替换数据在二进制文件中的位置,将所需数据替换原数据。
2、根据权利要求1所述的方法,其特征在于,所述步骤11)包括:
在编制源程序时,将所述标识与可替换数据在源程序语句上相连结;
编译所述源程序,获得可替换数据中设置有标识的二进制文件。
3、根据权利要求1所述的方法,其特征在于,所述标识是自定义的由多个字节组成的字符串,或者是自定义的由一定长度的数据组成的标识串。
4、根据权利要求1所述的方法,其特征在于,所述具有全局唯一性的标识具体是采用全局统一标识符自定义的标识。
5、根据权利要求4所述的方法,其特征在于,所述可替换数据为多个,每个可替换数据分别具有各自独立的全局统一标识符作为标识。
6、根据权利要求4所述的方法,其特征在于,所述可替换数据为多个,其中连续的可替换数据可以采用同一个全局统一标识符作为标识。
7、根据权利要求5或者6所述的方法,其特征在于,采用一个对照表,记录所述可替换数据与全局统一标识符的关系。
8、根据权利要求1或2所述的方法,其特征在于,所述步骤12)包括:
打开带有可替换数据标识的二进制文件;
读取所述二进制文件,并在该文件中检索所述可替换数据的标识;
根据所述获得的标识,确定可替换数据在该二进制文件中的位置。
CNB2006101142950A 2006-11-03 2006-11-03 一种对软件中的数据进行替换的方法 Active CN100533383C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2006101142950A CN100533383C (zh) 2006-11-03 2006-11-03 一种对软件中的数据进行替换的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2006101142950A CN100533383C (zh) 2006-11-03 2006-11-03 一种对软件中的数据进行替换的方法

Publications (2)

Publication Number Publication Date
CN1949175A CN1949175A (zh) 2007-04-18
CN100533383C true CN100533383C (zh) 2009-08-26

Family

ID=38018703

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2006101142950A Active CN100533383C (zh) 2006-11-03 2006-11-03 一种对软件中的数据进行替换的方法

Country Status (1)

Country Link
CN (1) CN100533383C (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2678095C (en) 2009-09-25 2012-05-01 Ibm Canada Limited - Ibm Canada Limitee Object level compatibility and class resizing utilizing semantic values
US9342285B2 (en) 2012-11-30 2016-05-17 Huawei Technologies Co., Ltd. Method and apparatus for detecting code change
CN104281443B (zh) * 2013-07-12 2020-06-26 锐迪科(重庆)微电子科技有限公司 利用tcm实现代码、数据替换的方法
CN103677821B (zh) * 2013-12-05 2018-06-12 金蝶软件(中国)有限公司 软件开发工具代码发布的方法和装置
CN105867953B (zh) * 2015-01-21 2019-04-26 中国移动通信集团云南有限公司 应用程序升级包生成方法和应用程序升级方法及对应装置
CN108388548B (zh) * 2018-02-24 2021-08-31 浪潮软件股份有限公司 一种实现脚本参数化的方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
AutoCAD环境下哑图数据的自动替换. 何清刚.工程设计CA与智能建筑,第6期. 1999
AutoCAD环境下哑图数据的自动替换. 何清刚.工程设计CA与智能建筑,第6期. 1999 *

Also Published As

Publication number Publication date
CN1949175A (zh) 2007-04-18

Similar Documents

Publication Publication Date Title
CN105069033B (zh) 一种创建数据库表模型的方法及装置
US7987087B2 (en) Method and system for improved software localization
US8245203B2 (en) Logging system and method for computer software
CN100533383C (zh) 一种对软件中的数据进行替换的方法
CN108139891B (zh) 用于生成建议以纠正未定义标记错误的方法和系统
TW201545067A (zh) 一種動態創建可附加和可拆除二進位檔案的系統和方法
KR100853933B1 (ko) 메인프레임 시스템의 응용프로그램을 개방형 시스템에적합한 응용프로그램으로 변환하는 마이그레이션 장치 및그 방법
CN105607923A (zh) 一种跨平台的航空电子系统配置数据生成与恢复方法
EP1055184B1 (en) Native data signatures in a file system
CN113296786B (zh) 数据处理方法、装置、电子设备及存储介质
CN108595187A (zh) 安卓安装包集成软件开发工具包的法、装置及存储介质
US20210365258A1 (en) Method and system for updating legacy software
CN113076167A (zh) 一种代码处理方法及相关设备
CN103761095B (zh) 一种生成通用的升级文件头部数据信息的方法
JP2010140408A (ja) ソースコード変換装置
CN100346308C (zh) 一种基于数据库操作的自动化测试方法
US6742180B1 (en) System and method providing seamless transition of operating system environment
US9405739B1 (en) Source code format for IDE code development with embedded objects
CN104484156A (zh) 多语言公式的编辑方法、编辑系统和多语言公式编辑器
CN104380250B (zh) 一种动态创建可附加和可拆除二进制文件的系统和方法
JP2010140407A (ja) ソースコード検査装置
Schlie et al. Reengineering variants of matlab/simulink software systems
CN113971044A (zh) 组件文档生成方法、装置、设备及可读存储介质
JP5808264B2 (ja) コード生成装置及びコード生成方法及びプログラム
US20210216526A1 (en) Autonomous self-healing application data validation using database configurations

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee

Owner name: FEITIAN TECHNOLOGIES CO., LTD.

Free format text: FORMER NAME: BEIJING FEITIAN CHENGXIN TECHNOLOGY CO., LTD.

CP03 Change of name, title or address

Address after: 100085 Beijing city Haidian District Xueqing Road No. 9 Ebizal building B block 17 layer

Patentee after: Feitian Technologies Co., Ltd.

Address before: 100083, Haidian District, Xueyuan Road, Beijing No. 40 research, 7A building, 5 floor

Patentee before: Beijing Feitian Chengxin Science & Technology Co., Ltd.