一种热补丁注入方法及装置制造方法及图纸

技术编号:15690615 阅读:77 留言:0更新日期:2017-06-24 03:09
本发明专利技术公开了一种热补丁注入方法及装置,涉及计算机软件领域,该方法将补丁代码加载到目标进程中,在确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行时,将该N行指令修改为跳转到补丁代码的首地址的指令,在运行过程中即可实现由被替换的代码跳转到补丁代码,从而实现热补丁注入,不需要被注入的进程中有事先编译,也减小了热补丁注入时的消耗。由于在将该N行指令修改为跳转到补丁代码的首地址的指令前,确定了被替换的代码中首地址开始的连续N行指令没有被任何线程运行,也减小了补丁加载时的运行风险。

Hot patch injection method and device

The invention discloses a hot patch injection method and device, relates to the field of computer software, the patch code loaded into the target process, first determine the address in the code to be replaced in the continuous N commands not by any thread running, the N commands for modifying jump to patch code the address of the first instruction in the process of operation can be realized by the replaced code jump to patch code, so as to realize the hot patch implantation, do not need to be injected into the process of the pre compiled, also reduce the heat consumption when injected into the patch. Because in the N command line modified to jump to the address of the first patch code before the instruction is determined to be replaced in the code first starting address for continuous N instruction is not any thread running, also reduce the operation risk of the patch loading.

【技术实现步骤摘要】
一种热补丁注入方法及装置
本专利技术涉及计算机软件领域,尤其涉及一种热补丁注入方法及装置。
技术介绍
对于正在运行的软件系统,想要进行一些功能扩展或者修补一些软件问题,而又要求不能复位系统,这就需要给系统打热补丁。热补丁就是把原来软件系统中的想要替换的函数单独修改重新编译组成热补丁单元,再通过热补丁加载工具加载到运行的目标软件系统中,替换原始函数。然而,目前使用的热补丁技术有两个问题,一是需要在被注入的进程中有事先编译进去的代码负责补丁函数对被补函数的替换;二是当将被替换函数的头几条指令修改为跳转到新的补丁函数时,补丁加载存在风险,解决这个风险的现有方案都存在应用面窄,不通用,增加额外的内存与cpu的消耗的问题。
技术实现思路
本专利技术提供一种热补丁注入方法及装置,以实现不依赖被注入的进程中有事先编译进去的代码进行热补丁注入,并减小热补丁注入时的消耗。依据本专利技术的一个方面,提供一种热补丁注入方法,包括:将补丁代码加载到目标进程中;确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行,所述N大于或等于目标体系结构中跳转到内存任意地址所需要的最小指令数;将所述N行指令修改为跳转到补丁代码的首地址的指令。进一步,所述确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行,具体包括:暂停目标进程内的所有线程;确定被替换的代码中首地址开始的连续N行指令为目标指令,并将该目标指令之外的至少一条指令修改为异常指令;让所有指针处于目标指令中的线程继续执行,当所有线程均被异常捕获工具捕捉时,确定所述目标指令没有被任何线程运行;此时,所述将所述N行指令修改为跳转到补丁代码的首地址的指令后,还包括:将所述修改为异常指令的至少一条指令恢复为原指令;继续执行目标进程内的所有线程。更进一步,所述将该目标指令之外的至少一条指令修改为异常指令,具体包括:将该目标指令的后一条指令修改为异常指令。较佳的,所述将补丁代码加载到目标进程中,具体包括:通过代码注入将补丁代码加载到目标进程中。本专利技术实施例还相应提供一种热补丁注入装置,包括:加载单元,用于将补丁代码加载到目标进程中;确定单元,用于确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行,所述N大于或等于目标体系结构中跳转到内存任意地址所需要的最小指令数;修改单元,用于将所述N行指令修改为跳转到补丁代码的首地址的指令。进一步,所述确定单元具体用于:暂停目标进程内的所有线程;确定被替换的代码中首地址开始的连续N行指令为目标指令,并将该目标指令之外的至少一条指令修改为异常指令;让所有指针处于目标指令中的线程继续执行,当所有线程均被异常捕获工具捕捉时,确定所述目标指令没有被任何线程运行;此时,所述修改单元还用于:将所述N行指令修改为跳转到补丁代码的首地址的指令后,将所述修改为异常指令的至少一条指令恢复为原指令,并继续执行目标进程内的所有线程。更进一步,所述确定单元将该目标指令之外的至少一条指令修改为异常指令,具体包括:将该目标指令的后一条指令修改为异常指令。较佳的,所述加载单元具体用于:通过代码注入将补丁代码加载到目标进程中。本专利技术有益效果如下:通过本专利技术实施例提供的热补丁注入方法及装置,将补丁代码加载到目标进程中,在确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行时,将该N行指令修改为跳转到补丁代码的首地址的指令,在运行过程中即可实现由被替换的代码跳转到补丁代码,从而实现热补丁注入,不需要被注入的进程中有事先编译,也减小了热补丁注入时的消耗。由于在将该N行指令修改为跳转到补丁代码的首地址的指令前,确定了被替换的代码中首地址开始的连续N行指令没有被任何线程运行,也减小了补丁加载时的运行风险。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例提供的热补丁注入方法流程图;图2为本专利技术实施例提供的具体实例中的热补丁注入方法流程图;图3为本专利技术实施例提供的热补丁注入装置结构示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。如图1所示,本专利技术实施例提供的热补丁注入方法,包括:步骤S101、将补丁代码加载到目标进程中;步骤S102、确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行,N大于或等于目标体系结构中跳转到内存任意地址所需要的最小指令数;步骤S103、将N行指令修改为跳转到补丁代码的首地址的指令。由于在确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行时,将该N行指令修改为跳转到补丁代码的首地址的指令,在运行过程中即可实现由被替换的代码跳转到补丁代码,从而实现热补丁注入,不需要被注入的进程中有事先编译,也减小了热补丁注入时的消耗。由于在将该N行指令修改为跳转到补丁代码的首地址的指令前,确定了被替换的代码中首地址开始的连续N行指令没有被任何线程运行,也减小了补丁加载时的运行风险。该方法可以由程序员执行,也可以由热补丁注入工具或者包含热补丁注入工具的装置来执行。具体的,可以利用异常捕获工具来确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行,此时,步骤S102中,确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行,具体包括:暂停目标进程内的所有线程;确定被替换的代码中首地址开始的连续N行指令为目标指令,并将该目标指令之外的至少一条指令修改为异常指令;让所有指针处于目标指令中的线程继续执行,当所有线程均被异常捕获工具捕捉时,确定目标指令没有被任何线程运行;此时,步骤S103中,将N行指令修改为跳转到补丁代码的首地址的指令后,还包括:将修改为异常指令的至少一条指令恢复为原指令;继续执行目标进程内的所有线程。当然,本领域技术人员也可以采用其它的方法或利用其它工具来确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行,此处不再一一说明。进一步,为提高异常捕获的效率,可以将该目标指令的后一条指令修改为异常指令,此时异常捕获的效率较高,修改量较少。此时,将该目标指令之外的至少一条指令修改为异常指令,具体包括:将该目标指令的后一条指令修改为异常指令。较佳的,可以通过代码注入等工具来实现补丁代码的加载,此时,步骤S101中,将补丁代码加载到目标进程中,具体包括:通过代码注入将补丁代码加载到目标进程中。下面,通过一个具体的实例对本专利技术实施例提供的热补丁注入方法进行说明:下面假设目的进程PROC中存在函数FUNC1,热补丁PATCH模块中存在函数FUNC2,目标体系结构中跳转到内存任意地址需要N条指令,欲将FUNC1替换为补丁函数FUNC2,如图2所示,详细实施步骤如下:步骤S201、通过目标操作系统提供的基础api组合实现代码注入,把补丁模块PATCH加载到PROC的本文档来自技高网...
一种热补丁注入方法及装置

【技术保护点】
一种热补丁注入方法,其特征在于,包括:将补丁代码加载到目标进程中;确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行,所述N大于或等于目标体系结构中跳转到内存任意地址所需要的最小指令数;将所述N行指令修改为跳转到补丁代码的首地址的指令。

【技术特征摘要】
1.一种热补丁注入方法,其特征在于,包括:将补丁代码加载到目标进程中;确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行,所述N大于或等于目标体系结构中跳转到内存任意地址所需要的最小指令数;将所述N行指令修改为跳转到补丁代码的首地址的指令。2.如权利要求1所述的方法,其特征在于,所述确定被替换的代码中首地址开始的连续N行指令没有被任何线程运行,具体包括:暂停目标进程内的所有线程;确定被替换的代码中首地址开始的连续N行指令为目标指令,并将该目标指令之外的至少一条指令修改为异常指令;让所有指针处于目标指令中的线程继续执行,当所有线程均被异常捕获工具捕捉时,确定所述目标指令没有被任何线程运行;所述将所述N行指令修改为跳转到补丁代码的首地址的指令后,还包括:将所述修改为异常指令的至少一条指令恢复为原指令;继续执行目标进程内的所有线程。3.如权利要求2所述的方法,其特征在于,所述将该目标指令之外的至少一条指令修改为异常指令,具体包括:将该目标指令的后一条指令修改为异常指令。4.如权利要求1所述的方法,其特征在于,所述将补丁代码加载到目标进程中,具体包括:通过代码注入将补丁代码加载到目标进程...

【专利技术属性】
技术研发人员:段晶晶李双全谢柏利
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1