本发明专利技术实施例公开了一种在线补丁的激活方法、通信装置及系统,其中,所述方法包括:向至少一个业务线程发送触发信号;获得与所述触发信号关联的所述至少一个业务线程的检查结果;根据所述业务线程的判断结果,确定所述业务线程被信号打断的地址均未位于待打补丁函数的临界区内,其中打断所述业务线程的信号包括所述触发信号;将所述待打补丁函数临界区内的入口指令修改为跳转到补丁函数的跳转指令。通过本发明专利技术实施例,提高应用软件在线补丁激活时的安全性和可靠性。
【技术实现步骤摘要】
本专利技术涉及计算机
,具体涉及一种在线补丁的激活方法、通信装置及系统。
技术介绍
在线补丁是指程序运行中不重启程序而生效的补丁,广泛应用于各类软件。参见图l,激活在线补丁的基本原理是将要原函数(即待打补丁的函数)的入口处的指令替换为跳转指令,然后通过替换的跳转指令将调用原函数的程序跳转到的补丁函数中执行。随着Linux X86系统在电信领域的广泛应用,同样要求对Linux系统中的应用软件能够在线打补丁,但由于X86系统的指令特点以及Linux的调度方式,使得简单的将被替换函数的入口处指令改为跳转指令的补丁激活方式变得不完全可靠,不能满足电信软件对可靠性的要求。参见图2,在LinuxX86系统中,无条件跳转指令占5个字节,激活在线补丁时绝大多数情况下都会覆盖原函数入口处的3条指令,称原函数中这3条指令占用的5个字节的区域为临界区。如果激活在线补丁时直接将原函数入口处的指令替换为跳转指令,则当进程中有多个线程时,有可能出现某线程执行到临界区处(如执行到第一条或第二条指令)时刚好发生线程切换的情况,若此时激活在线补丁,该线程切换回来后由于原函数的临界区代码已被新的跳转指令覆盖,程序便会发生异常。7现有技术一般使用Pannus补丁技术,具体包括以下步骤(1)使用函数ptrace将原函数的进程暂停;(2 )检查原函数所有线程的EIP值是否在临界区;(3) 如果没有线程的EIP值在临界区,则在补丁函数入口写入跳转指令,恢复进程的执行;(4) 如果有线程的EIP值在临界区,则恢复进程执行一段时间,重新暂停进程进行检查;(5) 检查若干次(可自定义,如10次)后,如果还不能激活补丁,则返回激活补丁失败。由于Pannus先暂停原函数进程,再检查所有线程的EIP值是否在临界区,因此,可以在一定程度上避免因直接写入而发生的程序异常。专利技术人在实现本专利技术过程中,发现现有技术中替换函数前只检查当前线程EIP值是否在临界区,假设有线程被某个信号打断后,被打断的地址位于临界区,则线程处理完信号处理函数后返回时,由于临界区已被跳转指令覆盖,这时将会导致程序出错,因此这种方法仍然不能保证激活补丁时安全可靠。
技术实现思路
本专利技术实施例在于提供一种在线补丁的激活方法、通信装置及系统,以提高应用软件在线补丁激活时的安全性和可靠性。本专利技术实施例是通过以下技术方案实现的本专利技术一个实施例提供了一种在线补丁激活方法,包括向至少一个业务线程发送触发信号;获得与所述触发信号关联的所述至少一个业务线程的检查结果;根据所述至少一个业务线程的检查结果,确定所述业务线程被信号打断的地址均未位于待打补丁函数的临界区内,其中打断所述业务线程的信号包括所述触发信号;修改所述待打补丁函数临界区的入口指令为跳转到补丁函数的跳转指令。本专利技术另一个实施例提供了一种在线补丁激活方法,包括在接收触发信号后,获得本业务线程被信号打断的地址,其中打断所述业务线程的信号包括所述触发信号;检查所述本业务线程被信号打断的地址是否位于待打补丁函数的临界区内,并输出所述业务线程的检查结果,使得补丁激活线程根据所述检查结果,确定本业务线程被信号打断的地址均未位于待打补丁函数的临界区内。以及,本专利技术另一个实施例提供了一种通信设备,包括发送单元,用于向至少一个业务线程发送触发信号;结果获得单元,用于获得与所述触发信号关联的所述至少一个业务线程的检查结果;确定单元,用于根据所述至少一个业务线程的检查结果,确定所述业务线程被信号打断的地址均未位于待打补丁函数的临界区内,其中打断所述业务线程的信号包括所述触发信号;改写单元,用于修改所述待打补丁函数临界区的入口指令为跳转到补丁函数的跳转指令。以及,本专利技术另一个实施例提供了一种通信设备,包括接收单元,用于接收触发信号;,用于获得本端被信号打断的地址,其中打断所述业务线程的信号包括所述触发信号;检查单元,用于检查本端被信号打断的地址是否位于待打补丁函数的临界区内;输出单元,用于输出所述检查单元的关联本端的检查结果,使得接收到所述检查结果的通信设备根据所述检查结果确定本端被信号打断的地址均未位于待打补丁函数的临界区内。以及,本专利技术另一个实施例提供了一种通信系统,该系统包括至少一个CPU,所述CPU上运行有操作系统,所述操作系统之上运行有补丁管理线程和至少一个业务线程,其中所述补丁管理线程,用于向所述至少一个业务线程发送触发信号,根据获得的与所述触发信号关联的所述至少一个业务线程的检查结果,确定所述业务线程被信号打断的地址均未位于待打补丁函数的临界区内,其中打断所述业务线程的信号包括所述触发信号;并修改所述待打补丁函数临界区的入口指令为跳转到补丁函数的跳转指令;所述业务线程,用于在接收触发信号后,获得本业务线程被信号打断的地址,其中打断所述业务线程的信号包括所述触发信号;并检查本业务线程被信号打断的地址是否位于待打补丁函数的临界区内,并输出所述业务线程的检查结果。本专利技术实施例中,通过向至少一个业务线程发送触发信号,使得接收到该触发信号的业务线程检查本业务线程被信号打断的地址是否位于待打补丁函数的临界区内;并根据获得的所述至少一个业务线程的检查结果,确定所述业务线程被信号打断的地址均未位于待打补丁函数的临界区内,再修改所述待打补丁函数临界区内的入口指令为跳转到补丁函数的跳转指令的技术方案,从而避免了当至少一个业务线程被信号打断后,如果处理完信号处理函数后所返回的地址(即业务线程被信号打断的地址)在临界区内,而由于临界区已被跳转指令覆盖所导致程序出错的问题,从而提高了应用软件在线补丁激活时的安全性和可靠性。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的 一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。图1为现有技术中的补丁激活原理示意图;图2为现有技术中的临界区示意图3为本专利技术实施例的一种在线补丁激活方法的交互示意图4为本专利技术实施例的另一种在线补丁激活方法的流程示意图5为图4中S150-160的一种具体流程示意图6为本专利技术实施例的另一种在线补丁激活方法的流程示意图7为本专利技术实施例的用户态调用栈的示意图8为本专利技术实施例的再一种在线补丁激活方法的流程示意图9为本专利技术实施例的一种通信装置的结构示意图IO为本专利技术实施例的另一种通信装置的结构示意图11为本专利技术实施例的通信系统的一种逻辑示意图。具体实施例方式为使本专利技术的目的、技术方案及优点更加清楚明白,以下将通过具体实 施例和相关附图,对本专利技术作进一步详细说明。本专利技术实施例提供一种在线补丁的激活方法、通信装置及通信系统,在 应用程序内部通过补丁线程激活补丁,并保证多线程条件下在线补丁激活的 安全性和可靠性。方法实施例参见图3,为本专利技术实施例的一种在线补丁激活方法,包括如下步骤5101、 补丁激活线程向至少一个业务线程发送触发信号;具体的,这里的触发信号可以是无法被所述至少一个业务线程所屏蔽的 特定信号;为了方便描述,下面以一个业务线程的角度来介绍。5102、 业务线程收到该触发信号后,获得本业务线程^皮信号打断的地址; 需要说明的是,这里打断本文档来自技高网...
【技术保护点】
一种在线补丁激活方法,其特征在于,包括: 向至少一个业务线程发送触发信号; 获得与所述触发信号关联的所述至少一个业务线程的检查结果; 根据所述至少一个业务线程的检查结果,确定所述业务线程被信号打断的地址均未位于待打补丁函数 的临界区内,其中打断所述业务线程的信号包括所述触发信号; 修改所述待打补丁函数临界区的入口指令为跳转到补丁函数的跳转指令。
【技术特征摘要】
【专利技术属性】
技术研发人员:邓珂,易愈鸿,郑伟,
申请(专利权)人:华为技术有限公司,
类型:发明
国别省市:94[中国|深圳]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。