在线补丁的激活方法、装置及系统制造方法及图纸

技术编号:8959314 阅读:158 留言:0更新日期:2013-07-25 18:53
本发明专利技术实施例公开了一种在线补丁的激活方法、装置及系统,其中,所述方法包括:定位补丁函数的地址和待打补丁函数的入口地址;基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过中间区中指令的执行跳转到所述补丁函数执行。通过本发明专利技术实施例,从而提高应用软件在线补丁激活时的安全性和可靠性。

【技术实现步骤摘要】
在线补丁的激活方法、装置及系统
本专利技术涉及计算机
,具体涉及一种在线补丁的激活方法、装置及系统。
技术介绍
在线补丁是指程序运行中不重启程序而生效的补丁,广泛应用于各类软件。参见图1,激活在线补丁的基本原理是将要原函数(即待打补丁的函数)的入口处的指令替换为跳转指令,然后通过替换的跳转指令将调用原函数的程序跳转到的补丁函数中执行。随着LinuxX86系统在电信领域的广泛应用,同样要求对Linux系统中的应用软件能够在线打补丁,但由于X86系统的指令特点以及Linux的调度方式,使得简单的将被替换函数的入口处指令改为跳转指令的补丁激活方式变得不完全可靠,不能满足电信软件对可靠性的要求。参见图2,在LinuxX86系统中,无条件跳转指令占5个字节,激活在线补丁时绝大多数情况下都会覆盖原函数入口处的3条指令,称原函数中这3条指令占用的5个字节的区域为临界区。如果激活在线补丁时直接将原函数入口处的指令替换为跳转指令,则当进程中有多个线程时,有可能出现某线程执行到临界区处(如执行到第一条或第二条指令)时刚好发生线程切换的情况,若此时激活在线补丁,该线程切换回来后由于原函数的临界区代码本文档来自技高网...
在线补丁的激活方法、装置及系统

【技术保护点】
一种在线补丁激活方法,其特征在于,包括:在待打补丁程序编译时,在所述程序的每个函数入口位置前或后预留中间区;定位补丁函数的地址和待打补丁函数的入口地址;基于所述补丁函数的地址和所述待打补丁函数的入口地址,在所述中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过所述中间区指令的执行跳转到所述补丁函数执行;其中,所述在待打补丁程序编译时,在所述程序的每个函数入口位置前或后预留所述中间区的步骤,包括:将待...

【技术特征摘要】
1.一种在线补丁激活方法,其特征在于,包括:在待打补丁程序编译时,在所述程序的每个函数入口位置前或后预留中间区;定位补丁函数的地址和待打补丁函数的入口地址;基于所述补丁函数的地址和所述待打补丁函数的入口地址,在所述中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过所述中间区指令的执行跳转到所述补丁函数执行;其中,所述在待打补丁程序编译时,在所述程序的每个函数入口位置前或后预留所述中间区的步骤,包括:将待打补丁程序的多个源文件编译生成多个汇编文件后,查找所述多个汇编文件中表示函数的关键字字符串;在找到的表示函数的关键字字符串所指示的函数入口位置的前或后,插入指定字节数的初始指令以预留中间区;其中,所述指定字节数表示所述中间区的大小;对插入有所述初始指令的所述多个汇编文件重新编译生成多个新的汇编文件,并将所述多个新的汇编文件编译生成多个目标文件,由所述多个目标文件链接生成待打补丁程序的可执行文件。2.如权利要求1所述的在线补丁激活方法,其特征在于,被修改为短跳转指令的指令为待打补丁函数入口位置处的首条指令,且长度大于或等于两字节。3.如权利要求1所述的在线补丁激活方法,其特征在于,被修改为短跳转指令的指令为待打补丁函数入口位置处的非首条指令,且长度大于或等于两字节,所述方法还包括:在所述中间区写入处于所述被修改指令前的操作指令的反操作指令。4.如权利要求3所述的在线补丁激活方法,其特征在于,所述待打补丁函数入口位置处的非首条指令为入栈指令push之后的指令;所述处于被修改指令前的操作指令的反操作指令为出栈指令pop。5.一种通信系统,其特征在于,所述通信系统包括至少一个CPU、内存、编译器,所述CPU上运行有Linux操作系统,所述Linux操作系统之上运行有至少一种应用程序,所述应用程序关联有补丁管理线程和至少一个业务线程,其中:所述内存中载入有包含至少一个待打补丁函数的应用程序和包含补丁函数的补丁文件,其中,所述待打补丁函数的入口位置前或后具有能放置至少一条长跳转指令的存储空间;所述编译器用于在对待打补丁程序进行编译时,在所述待打补丁程序的每个函数入口位置前或后预留能放置至少一条长跳转指令的存储空间;所述补丁管理线程用于在所述应用程序的运行过程中,定位所述补丁函数的地址和所述待打补丁函数的入口地址,并在所述存储空间写入用于跳转到所述补丁函数的长跳转指令,以及将所述待打补丁函数入口位置处的指令修改为用于跳转到所述存储空间的短跳转指令;所述业务线程用于通过执行所述待打补丁函数入口位置处的短跳转指令跳转到所述存储空间,再通过所述存储空间中指令的执行跳转到所述补丁函数执行;其中,所述编译器具体用于:将待打补丁程序的多个源文件编译生成多个汇编文件后,查找所述多个汇编文件中表示函数的关键字字符串,并在找到的表示函数的关键字字符串所指示的函数入口位置的前或后,插入指定字节数的初始指令以预留能放置至少一条长跳转指令的存储空间;对插入有所述初始指令的所述多个汇...

【专利技术属性】
技术研发人员:余加强郑伟
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

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

1