CN107423084B - 程序修改方法及装置 - Google Patents
程序修改方法及装置 Download PDFInfo
- Publication number
- CN107423084B CN107423084B CN201710269568.7A CN201710269568A CN107423084B CN 107423084 B CN107423084 B CN 107423084B CN 201710269568 A CN201710269568 A CN 201710269568A CN 107423084 B CN107423084 B CN 107423084B
- Authority
- CN
- China
- Prior art keywords
- target
- pointer
- program
- expression form
- target pointer
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/654—Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种程序修改方法及装置,所述方法包括:执行预设的程序修改脚本,获取目标程序文件;通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针,其中,所述预设位数小于所述目标程序在被目标操作系统执行时,所述目标操作系统赋予给所述目标指针的实际位数;将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式。如此,实现了目标程序文件的自动修改,提高了程序修改的效率,并降低了程序修改的错误率。
Description
技术领域
本发明涉及数据处理技术领域,具体而言,涉及一种程序修改方法及装置。
背景技术
随着电子终端硬件技术的发展,CPU处理器的能力的越来越强,更高位数的CPU被更多地应用到电子设备中。但是对于一些以较低位数(如32位)系统为标准开发的应用程序,其中的代码都固化的认为存储一个内存地址是一个较低的位数(如32位),并且分配内存地址空间时,分配的内存地址也是较低位数的(如32位)。这些程序在较高位数(如64位)的系统中运行时,系统将分配一个的较高位数(如64位)内存地址,那么程序就会产生错误,导致数据截取,使得高位的数据丢失,从而产生内存访问异常。这时需要对程序文件中的数据进行修改,对于程序代码非常多、量级很大的程序文件,如果手工去修改代码中所有的内存访问代码,将会非常耗时耗力,而且手工修改容易失误产生修改错误,影响程序的正常运行。
发明内容
为了克服现有技术中的上述不足,本发明的目的在于提供一种程序修改方法,所述方法包括:
执行预设的程序修改脚本,获取目标程序文件;
通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针,其中,所述预设位数小于所述目标程序在被目标操作系统执行时,所述目标操作系统赋予给所述目标指针的实际位数;
将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式。
进一步地,在上述方法中,所述通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针的步骤,包括:
遍历所述目标程序文件中的每一行代码;
针对所述目标程序中的每一行代码,通过所述正则表达式查找该行代码中被定义为预设位数的第一表达形式的目标指针。
进一步地,在上述方法中,所述通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针的步骤,包括:
执行所述程序修改脚本中的while函数,在while函数中循环执行getline函数获取所述目标程序文件中的每行代码;
针对获取到的每一行代码,通过所述正则表达式查找定义为预设位数的目标指针。
进一步地,在上述方法中,所述将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式的步骤,包括:
将所述目标指针中高于所述预设位数的数据作为高位数据,将所述目标指针中预设位数以内的数据作为低位数据;
将所述目标指针的表达形式替换为由所述高位数据与所述低位数据拼接而成的第二表达形式。
进一步地,在上述方法中,所述将所述目标指针的表达形式替换为由所述高位数据与所述低位数据拼接而成的第二表达形式的步骤,包括:
将所述目标指针的表达形式替换为由所述高位数据与所述低位数据相或的第二表达形式。
进一步地,在上述方法中,所述预设位数为32位,所述目标操作系统为64位的操作系统;所述将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式的步骤,包括:
将所述目标指针中的数据与0xFFFFFFFF0000000相与,得到所述目标指针中高32位的数据;
将所述目标指针中的表达形式替换为由该目标指针高32位的数据与从所述目标指针中读出的低32位的数据相或的第二表达形式。
进一步地,在上述方法中,所述程序修改脚本定义有一宏,所述宏用于提取所述目标指针中高于所述预设位数的数据;所述将所述目标指针的表达形式替换为由所述高位数据与所述低位数据拼接而成的第二表达形式的步骤,包括:
将所述目标指针中的表达形式替换为由所述宏与所述低位数据相或的第二表达形式。
进一步地,在上述方法中,所述方法还包括:
生成针对所述目标程序文件中每一行进行处理得到的修改后的代码,将该修改后的代码存入一临时文档中;
在所述目标程序文件的处理完成后,根据所述临时文档生成新的程序文件。
本发明的另一目的在于提供一种程序修改装置,所述装置包括:
获取模块,用于执行预设的程序修改脚本,获取目标程序文件;
查找模块,用于通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针,其中,所述预设位数小于所述目标程序在被目标操作系统执行时,所述目标操作系统赋予给所述目标指针的实际位数;
修改模块,用于将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式。
进一步地,在上述装置中,所述修改模块进行目标指针的表达形式修改的方式,包括:
将所述目标指针中高于所述预设位数的数据作为高位数据,将所述目标指针中预设位数以内的数据作为低位数据;
将所述目标指针的表达形式替换为由所述高位数据与所述低位数据拼接而成的第二表达形式。相对于现有技术而言,本发明具有以下有益效果:
本发明提供的程序修改方法及装置,通过运行程序修改脚本,根据程序修改脚本中的正则表达式查找目标程序文件汇总被定义为预设位数的第一表达形式的目标指针,并把所述目标指针的表达形式替换为支持第二位数的操作系统的第二表达形式,使修改后的目标程序文件可以在较高位数的操作系统中正常运行。如此,实现了目标程序文件的自动修改,提高了程序修改的效率,并降低了程序修改的错误率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例提供的电子终端的示意图;
图2为本发明实施例提供的程序修改方法的步骤流程示意图;
图3为本发明实施例提供的程序修改装置的示意图之一;
图4为本发明实施例提供的程序修改装置的示意图之二。
图标:100-电子终端;110-程序修改装置;111-获取模块;112-查找模块;113-修改模块;114-临时存储模块;115-生成模块;120-存储器;130-处理器。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
此外,术语“水平”、“竖直”、“悬垂”等术语并不表示要求部件绝对水平或悬垂,而是可以稍微倾斜。如“水平”仅仅是指其方向相对“竖直”而言更加水平,并不是表示该结构一定要完全水平,而是可以稍微倾斜。
在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
请参照图1,图1为本发明较佳实施例提供的电子终端100,所述电子终端100包括程序修改装置110、存储器120及处理器130。
所述存储器120以及处理器130各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述程序修改装置110包括至少一个可以软件或固件(firmware)的形式存储于所述存储器120中或固化在所述电子终端100的操作系统(operating system,OS)中的软件功能模块。所述处理器130用于执行所述存储器120中存储的可执行模块,例如所述程序修改装置110所包括的软件功能模块及计算机程序等。
其中,所述存储器120可以是,但不限于,随机存取存储器(Random AccessMemory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(ProgrammableRead-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-OnlyMemory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-OnlyMemory,EEPROM)等。其中,存储器120用于存储程序,所述处理器130在接收到执行指令后,执行所述程序。
所述处理器130可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(DSP))、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
请参照图2,图2为应用于图1所示的电子终端100的一种应用信息获取方法的流程图,以下将对所述方法包括各个步骤进行详细阐述。
步骤S110,执行预设的程序修改脚本,获取目标程序文件。
所述电子终端100运行所述程序修改脚本,将所述程序修改脚本中指定的目标程序文件读取到内存中。所述目标程序文件为以较低位数系统为标准的程序文件,在本实施例中,以所述目标程序文件可以为以32位系统为标准的程序文件。
例如,所述程序修改脚本中可以包括如下指令。
ifstreamfFile(filName,ifstream::in|ifstream::binary)
其中,ifstream指令用于将文件从存储器120读取到内存中,参数filName标示文件的名称,参数ifstream::in|ifstream::binary标示读文件。
步骤S120,通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针,其中,所述预设位数小于所述目标程序在被目标操作系统执行时,所述目标操作系统赋予给所述目标指针的实际位数。
步骤S130,将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式。
经发明人研究发现,由于目标程序文件为以较低位数系统为标准开发的程序文件,所述目标程序文件在较高位数的目标操作系统运行时导致数据截取,使得高位的数据丢失。
在本实施例中,假设所述预设位数为32位,所述目标操作系统为64位。所述目标程序文件中包括以下代码:
*(int*)(ptr+72)=(int)(ptr+100);
其中ptr+72是一个内存指针,而ptr+100则是一个二级指针,即,所述二级指针为目标指针。
因为在64位的目标操作系统下系统下,ptr的大小为64位,ptr+100的大小也是64位。
但是在所述内存指针ptr+72的偏移处存储的内容为所述二级指针ptr+100的低32位的内容,所述二级指针的高位数据则被截断丢弃了。
例如假设指针ptr内容是0x123456789共9位,是一个64位的地址,那么其存储在ptr+72处的内容会是0x23456789,其中最高位的1则丢弃了。而这种丢弃在数据存储上不会有问题,当其对二级指针进行进一步访问时则会出现问题,因为二级指针位数不对。
发明人发现,如果需要保证所述目标程序文件在较高位数的目标操作系统中正常运行,则改变上述二级指针的表达形式,将所述目标指针的表达形式替换为由所述高位数据与所述低位数据拼接而成的第二表达形式。具体,可以将所述目标指针的表达形式替换为由所述高位数据与所述低位数据相或的第二表达形式。
例如,针对以下代码
Int data=*(uint32*)(*(uint32*)(ptr64+72)+5);
其中,上述代码中是对二级指针ptr64+72的偏移5的位置读取一个32位的数据。*(uint32*)(ptr64+72)即为目标指针,由于存储在ptr64+72处的数据是一个32位的而不是64位的指针,那么直接访问内存会产生内存访问错误。所以需要对所述二级指针ptr64+72进行拼接,将高位补齐。补齐的办法则是通过从ptr64指针中获取高位并逻辑或运算到二级指针中。具体实现如下:
*(int*)(ptr64+72)转换成
(ptr64&0xFFFFFFFF00000000)|(*(int*)(ptr64+72))
其中,ptr64&0xFFFFFFFF00000000则表示从ptr64中取出高32位数据作为高位数据,将从prt65+72中读取的数据作为低位数据。通过逻辑或运算将2个数据拼接起来。从而使得二级指针变成一个64位的指针,使其可以正确的访问64位的内存。
故在本实施例中,发明人设计通过一段正则表达式查找所述目标程序文件中定义为较低的预设位数的目标指针,并修改所述目标指针的表达形式。
具体地,根据代码编写的规则,所述目标程序文件中定义为预设位数的目标指针具有相应的定义标识字段,比如,定义为32为的目标指针的形式为(*(uint32*)(ptr64+40)+20)。
则在本实施例中,将查找的正则表达式编写为如下形式
(\*\([uint32|uint8|uint16]+\s\*\)\()(.*\));
其中,(\*\([uint32|uint8|uint16]+\s\*\)标示匹配代码中的*(uint8*)、*(uint16*)、*(uint32*)字段。
替换的正则表达式如下:$1HA(ptr64)|$2;
其中,替换$1标示第一个括号的表达式,$2标示第二个括号的表达式。HA是预先编写的一个宏,用于提取所述目标指针中高于所述预设位数的数据,具体内容可以定义为如下形式:
HA(ptr64)(ptr64&0xFFFFFFFF00000000)
所述电子终端100将所述目标指针中的表达形式替换为由所述宏与所述低位数据相或的第二表达形式。
通过上面的替换可以将在所述目标指针的表达形式替换为所述目标操作系统支持的表达形式,例如,假设程序中有这样的代码:
uint8data1=*(uint8*)(*(uint32*)(ptr64+40)-24);
uint16data2=*(uint16*)(*(uint32*)(ptr64+40)+10);
uint16data3=*(uint32*)(*(uint32*)(ptr64+40)+20)。
对应的替换后的正确的代码如下:
uint8data1=*(uint8*)(((HA(ptr64)|*(uint32*)(ptr64+40))-24);
uint16data2=*(uint16*)(((HA(ptr64)|*(uint32*)(ptr64+40))+10);
uint16data3=*(uint32*)(((HA(ptr64)|*(uint32*)(ptr64+40))+20)。
基于上述设计,在本实施例中,所述电子终端100执行所述程序修改脚本,遍历所述目标程序文件中的每一行代码。针对所述目标程序中的每一行代码,通过所述正则表达式查找该行代码中被定义为预设位数的第一表达形式的目标指针。
具体地,执行所述程序修改脚本中的while函数,在while函数中循环执行getline函数获取所述目标程序文件中的每行代码。
例如,所述程序修改脚本中可以包括如下指令:
while(getline(fFile,strLine))
其中,while表示循环执行,getline指令标识获取行,参数filName标示文件的名称,strLine标识行中的字符串。
所述电子终端100针对所述目标程序中的每一行代码,通过所述正则表达式查找该行代码中被定义为预设位数的第一表达形式的目标指针
例如,所述程序修改脚本在上述while指令的循环中可以包括如下指令:
{
regex reg(strReg);//定义一个根据前述设计编写的正则表达式。
strLine=regex_replace(strLine,reg,replace);//然后调用正则表达式接口regex_replace来对每一行代码进行替换。其中参数strLine标示是读取到的文件的一行内容,参数reg则标示是一个正则表达式,replace则是替换的正则表达式。
}
具体地,在上述代码中,reg参数表示前述设计编写的正则表达式的查找内容。replace参数表示前述编写的正则表达式中的替换内容。
基于上述设计,在本实施例中,所述程序修改脚本可以自动查找所述目标程序文件中需要修改的目标指针,并通过所述正则表达式进行修改,相比于现有技术中手动修改的方式,修改效率更高,出错几率更小。
进一步地,在本实施例中,所述电子终端100针对每行代码进行修改后,生成针对所述目标程序文件中每一行进行处理得到的修改后的代码,将该修改后的代码存入一临时文档中。
例如,在上述程序修改脚本的while循环中可以包括以下指令:
vecNewFile.push_back(strLine);//然后将替换过的内容保存到一个对象vecNewFile中。
在所述目标程序文件的处理完成后,根据所述临时文档生成新的程序文件。
例如,在上述程序修改脚本的while循环之后可以包括以下指令:
ofstreamobjNewFile(filNamesave);//定义一个文件对象,用于生成一个新文件,其中参数filNamesave则是新文件的文件名称。
for(vector<string>::iterator itrNew=vecNewFile.begin();itrNew!=vecNewFile.end();++itrNew)//然后使用for循环来遍历vecNewFile中存储的每一行文件内容,将其写入到文件中。
{
objNewFile<<(*itrNew)<<endl;
}
objNewFile.close();//关闭文件。
基于上述设计,通过运行所述程序修改脚本实现了对整个所述目标程序文件的修改,是所述目标程序文件可以支持在较高的目标操作系统中运行。
请参照图3,本实施例还提供一种应用于图1所示电子终端100的程序修改装置110,所述装置包括获取模块111、查找模块112及修改模块113。
所述获取模块111,用于执行预设的程序修改脚本,获取目标程序文件。
本实施例中,所述获取模块111可用于执行图2所示的步骤S110,关于所述获取模块111的具体描述可参对所述步骤S110的描述。
所述查找模块112,用于通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针,其中,所述预设位数小于所述目标程序在被目标操作系统执行时,所述目标操作系统赋予给所述目标指针的实际位数。
本实施例中,所述查找模块112可用于执行图2所示的步骤S120,关于所述查找模块112的具体描述可参对所述步骤S120的描述。
所述修改模块113,用于将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式。
本实施例中,所述修改模块113可用于执行图2所示的步骤S130,关于所述修改模块113的具体描述可参对所述步骤S130的描述。
进一步地,在本实施例中,所述修改模块113进行目标指针的表达形式修改的方式,包括:
将所述目标指针中高于所述预设位数的数据作为高位数据,将所述目标指针中预设位数以内的数据作为低位数据;
将所述目标指针的表达形式替换为由所述高位数据与所述低位数据拼接而成的第二表达形式。
进一步地,请参照图4,在本实施例中,所述装置还包括临时存储模块114及生成模块115。
所述临时存储模块114,用于生成针对所述目标程序文件中每一行进行处理得到的修改后的代码,将该修改后的代码存入一临时文档中。
所述生成模块115,用于在所述目标程序文件的处理完成后,根据所述临时文档生成新的程序文件。
综上所述,本发明提供的程序修改方法及装置,通过运行程序修改脚本,根据程序修改脚本中的正则表达式查找目标程序文件汇总被定义为预设位数的第一表达形式的目标指针,并把所述目标指针的表达形式替换为支持第二位数的操作系统的第二表达形式,使修改后的目标程序文件可以在较高位数的操作系统中正常运行。如此,实现了目标程序文件的自动修改,提高了程序修改的效率,并降低了程序修改的错误率。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (8)
1.一种程序修改方法,其特征在于,所述方法包括:
执行预设的程序修改脚本,获取目标程序文件;
通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针,其中,所述预设位数小于所述目标程序在被目标操作系统执行时,所述目标操作系统赋予给所述目标指针的实际位数;
将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式;
其中,所述将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式的步骤,包括:
将所述目标指针中高于所述预设位数的数据作为高位数据,将所述目标指针中预设位数以内的数据作为低位数据;
将所述目标指针的表达形式替换为由所述高位数据与所述低位数据拼接而成的第二表达形式。
2.根据权利要求1所述的方法,其特征在于,所述通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针的步骤,包括:
遍历所述目标程序文件中的每一行代码;
针对所述目标程序中的每一行代码,通过所述正则表达式查找该行代码中被定义为预设位数的第一表达形式的目标指针。
3.根据权利要求1所述的方法,其特征在于,所述通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针的步骤,包括:
执行所述程序修改脚本中的while函数,在while函数中循环执行getline函数获取所述目标程序文件中的每行代码;
针对获取到的每一行代码,通过所述正则表达式查找定义为预设位数的目标指针。
4.根据权利要求1所述的方法,其特征在于,所述将所述目标指针的表达形式替换为由所述高位数据与所述低位数据拼接而成的第二表达形式的步骤,包括:
将所述目标指针的表达形式替换为由所述高位数据与所述低位数据相或的第二表达形式。
5.根据权利要求4所述的方法,其特征在于,所述预设位数为32位,所述目标操作系统为64位的操作系统;所述将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式的步骤,包括:
将所述目标指针中的数据与0xFFFFFFFF0000000相与,得到所述目标指针中高32位的数据;
将所述目标指针中的表达形式替换为由该目标指针高32位的数据与从所述目标指针中读出的低32位的数据相或的第二表达形式。
6.根据权利要求1或4所述的方法,其特征在于,所述程序修改脚本定义有一宏,所述宏用于提取所述目标指针中高于所述预设位数的数据;所述将所述目标指针的表达形式替换为由所述高位数据与所述低位数据拼接而成的第二表达形式的步骤,包括:
将所述目标指针中的表达形式替换为由所述宏与所述低位数据相或的第二表达形式。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
生成针对所述目标程序文件中每一行进行处理得到的修改后的代码,将该修改后的代码存入一临时文档中;
在所述目标程序文件的处理完成后,根据所述临时文档生成新的程序文件。
8.一种程序修改装置,其特征在于,所述装置包括:
获取模块,用于执行预设的程序修改脚本,获取目标程序文件;
查找模块,用于通过所述程序修改脚本中的正则表达式查找所述目标程序文件中被定义为预设位数的第一表达形式的目标指针,其中,所述预设位数小于所述目标程序在被目标操作系统执行时,所述目标操作系统赋予给所述目标指针的实际位数;
修改模块,用于将所述目标指针的表达形式替换为支持目标操作系统的第二表达形式;
其中,所述修改模块进行目标指针的表达形式修改的方式,包括:
将所述目标指针中高于所述预设位数的数据作为高位数据,将所述目标指针中预设位数以内的数据作为低位数据;
将所述目标指针的表达形式替换为由所述高位数据与所述低位数据拼接而成的第二表达形式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710269568.7A CN107423084B (zh) | 2017-04-24 | 2017-04-24 | 程序修改方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710269568.7A CN107423084B (zh) | 2017-04-24 | 2017-04-24 | 程序修改方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107423084A CN107423084A (zh) | 2017-12-01 |
CN107423084B true CN107423084B (zh) | 2021-02-02 |
Family
ID=60424086
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710269568.7A Active CN107423084B (zh) | 2017-04-24 | 2017-04-24 | 程序修改方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107423084B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112015425A (zh) * | 2020-08-17 | 2020-12-01 | 中移(杭州)信息技术有限公司 | 数据存储方法、读取方法、装置、电子设备及存储介质 |
CN115048101A (zh) * | 2022-06-23 | 2022-09-13 | 广州方硅信息技术有限公司 | 整型代码扫描方法及其装置、设备、介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1892591A (zh) * | 2001-10-23 | 2007-01-10 | 微软公司 | 本地和非本地共享数据结构间的数据对齐 |
WO2009097162A1 (en) * | 2008-02-01 | 2009-08-06 | The Oliver Group | A method for searching and indexing data and a system for implementing same |
CN101645017A (zh) * | 2009-09-07 | 2010-02-10 | 深圳市茁壮网络股份有限公司 | 跨平台的字节序处理方法、装置和字节码运行平台 |
CN102301342A (zh) * | 2009-07-29 | 2011-12-28 | 华为技术有限公司 | 正则表达式匹配方法和系统及查找装置 |
CN102929596A (zh) * | 2012-09-21 | 2013-02-13 | 华为技术有限公司 | 代码排查方法和相关装置 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5678039A (en) * | 1994-09-30 | 1997-10-14 | Borland International, Inc. | System and methods for translating software into localized versions |
US6662361B1 (en) * | 2000-01-14 | 2003-12-09 | International Business Machines Corporation | Method, system, program, and data structures for transforming an instruction in a first bit architecture to an instruction in a second bit architecture |
US7406681B1 (en) * | 2000-10-12 | 2008-07-29 | Sun Microsystems, Inc. | Automatic conversion of source code from 32-bit to 64-bit |
CN101360088B (zh) * | 2007-07-30 | 2011-09-14 | 华为技术有限公司 | 正则表达式编译、匹配系统及编译、匹配方法 |
CN101841430A (zh) * | 2010-05-05 | 2010-09-22 | 北京星网锐捷网络技术有限公司 | 一种命令行的修正方法及装置 |
US9411855B2 (en) * | 2010-10-25 | 2016-08-09 | Salesforce.Com, Inc. | Triggering actions in an information feed system |
JP5921292B2 (ja) * | 2012-04-03 | 2016-05-24 | キヤノン株式会社 | 情報処理装置、制御方法、およびプログラム |
CN103514189A (zh) * | 2012-06-25 | 2014-01-15 | 上海博腾信息科技有限公司 | 一种基于搜索引擎的网络爬虫的实现方法 |
US10120663B2 (en) * | 2014-03-28 | 2018-11-06 | Intel Corporation | Inter-architecture compatability module to allow code module of one architecture to use library module of another architecture |
US9286057B2 (en) * | 2014-06-11 | 2016-03-15 | International Business Machines Corporation | Updating software based on utilized functions |
CN104462268B (zh) * | 2014-11-24 | 2017-12-12 | 深圳市比一比网络科技有限公司 | 一种html文档信息抽取表达式的方法及系统 |
CN105354269B (zh) * | 2015-10-27 | 2019-07-12 | 中通服公众信息产业股份有限公司 | 基于反向代理及内容过滤的Web应用语言本地化方法和系统 |
CN106021497B (zh) * | 2016-05-23 | 2021-06-08 | 中国银联股份有限公司 | 数据库访问口令管理方法 |
CN106201502B (zh) * | 2016-07-06 | 2019-12-06 | 中国银联股份有限公司 | 一种跨主机应用程序部署方法及装置 |
-
2017
- 2017-04-24 CN CN201710269568.7A patent/CN107423084B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1892591A (zh) * | 2001-10-23 | 2007-01-10 | 微软公司 | 本地和非本地共享数据结构间的数据对齐 |
WO2009097162A1 (en) * | 2008-02-01 | 2009-08-06 | The Oliver Group | A method for searching and indexing data and a system for implementing same |
CN102301342A (zh) * | 2009-07-29 | 2011-12-28 | 华为技术有限公司 | 正则表达式匹配方法和系统及查找装置 |
CN101645017A (zh) * | 2009-09-07 | 2010-02-10 | 深圳市茁壮网络股份有限公司 | 跨平台的字节序处理方法、装置和字节码运行平台 |
CN102929596A (zh) * | 2012-09-21 | 2013-02-13 | 华为技术有限公司 | 代码排查方法和相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107423084A (zh) | 2017-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10579344B2 (en) | Converting visual diagrams into code | |
EP3353672B1 (en) | Method and apparatus for transferring data between databases | |
WO2019095968A1 (zh) | 一种动态加载方法、目标文件的制作方法及装置 | |
CN106897072B (zh) | 业务工程调用方法、装置及电子设备 | |
US9043757B2 (en) | Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files | |
US20180364999A1 (en) | Method and Device for Identifying File | |
CN106407111B (zh) | 终端测试装置、终端测试设备及变量维护方法 | |
WO2018040270A1 (zh) | 在Windows系统中加载Linux系统ELF文件的方法及装置 | |
CN107783786B (zh) | 一种创建设备资源的方法和装置 | |
US11392765B2 (en) | Interpreting HL7 segment hierarchy dynamically | |
WO2020142300A1 (en) | Automatic resource management for build systems | |
CN107423084B (zh) | 程序修改方法及装置 | |
US20120159515A1 (en) | Sharing object representations | |
CN109062906B (zh) | 程序语言资源的翻译方法及装置 | |
CN105447040B (zh) | 二进制文件管理、更新方法、装置以及系统 | |
CN110058904B (zh) | 数据转移方法、装置及服务器 | |
CN109409037B (zh) | 一种数据混淆规则的生成方法、装置及设备 | |
CN111488144A (zh) | 一种数据处理方法以及设备 | |
CN114816772B (zh) | 基于兼容层运行的应用的排错方法、排错系统及计算设备 | |
CN111273940B (zh) | 将程序文件上传至代码仓库的方法及装置 | |
CN109739876B (zh) | 基于Sqltoy-orm框架的数据库的数据查询方法和装置 | |
CN113760237A (zh) | 编译地址的更新方法、装置、终端设备及可读存储介质 | |
CN107451050A (zh) | 函数获取方法和装置、服务器 | |
CN114218261A (zh) | 数据查询方法、装置、存储介质以及电子设备 | |
CN113177391A (zh) | 在流式界面中操作光标重定向方法、计算设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |