[发明专利]在线补丁激活方法、通信装置及系统有效
申请号: | 200910105200.2 | 申请日: | 2009-01-20 |
公开(公告)号: | CN101482834A | 公开(公告)日: | 2009-07-15 |
发明(设计)人: | 郑伟;邓珂;易愈鸿 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 518129广东省*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 在线 补丁 激活 方法 通信 装置 系统 | ||
技术领域
本发明涉及计算机技术领域,具体涉及一种在线补丁的激活方法、通信装置及系统。
背景技术
在线补丁是指程序运行中不重启程序而生效的补丁,广泛应用于各类软件。参见图1,激活在线补丁的基本原理是将要原函数(即待打补丁的函数)的入口处的指令替换为跳转指令,然后通过替换的跳转指令将调用原函数的程序跳转到的补丁函数中执行。随着Linux X86系统在电信领域的广泛应用,同样要求对Linux系统中的应用软件能够在线打补丁,但由于X86系统的指令特点以及Linux的调度方式,使得简单的将被替换函数的入口处指令改为跳转指令的补丁激活方式变得不完全可靠,不能满足电信软件对可靠性的要求。
参见图2,在Linux X86系统中,无条件跳转指令占5个字节,激活在线补丁时绝大多数情况下都会覆盖原函数入口处的3条指令,称原函数中这3条指令占用的5个字节的区域为临界区。如果激活在线补丁时直接将原函数入口处的指令替换为跳转指令,则当进程中有多个线程时,有可能出现某线程执行到临界区处(如执行到第一条或第二条指令)时刚好发生线程切换的情况,若此时激活在线补丁,该线程切换回来后由于原函数的临界区代码已被新的跳转指令覆盖,程序便会发生异常。
现有技术一般使用Pannus补丁技术,具体包括以下步骤:
(1)使用函数ptrace将原函数的进程暂停;
(2)检查原函数所有线程的EIP值是否在临界区;
(3)如果没有线程的EIP值在临界区,则在补丁函数入口写入跳转指令,恢复进程的执行;
(4)如果有线程的EIP值在临界区,则恢复进程执行一段时间,重新暂停进程进行检查;
(5)检查若干次(可自定义,如10次)后,如果还不能激活补丁,则返回激活补丁失败。
由于Pannus先暂停原函数进程,再检查所有线程的EIP值是否在临界区,因此,可以在一定程度上避免因直接写入而发生的程序异常。
发明人在实现本发明过程中,发现现有技术中:
替换函数前只检查当前线程EIP值是否在临界区,假设有线程被某个信号打断后,被打断的地址位于临界区,则线程处理完信号处理函数后返回时,由于临界区已被跳转指令覆盖,这时将会导致程序出错,因此这种方法仍然不能保证激活补丁时安全可靠。
发明内容
本发明实施例在于提供一种在线补丁的激活方法、通信装置及系统,以提高应用软件在线补丁激活时的安全性和可靠性。
本发明实施例是通过以下技术方案实现的:
本发明一个实施例提供了一种在线补丁激活方法,包括:向至少一个业务线程发送触发信号,使得所述至少一个业务线程检查本业务线程被信号打 断的地址是否位于待打补丁函数的临界区并输出所述至少一个业务线程对应的检查结果;其中打断所述业务线程的信号包括所述触发信号;
获得所述检查结果;
当根据所述检查结果,确定所述业务线程被信号打断的地址均未位于待打补丁函数的临界区内时,修改所述待打补丁函数临界区的入口指令为跳转到补丁函数的跳转指令。
本发明另一个实施例提供了一种在线补丁激活方法,包括:
在接收到补丁激活线程发送的触发信号后,获得本业务线程被信号打断的地址,其中打断所述业务线程的信号包括所述触发信号;
检查所述本业务线程被信号打断的地址是否位于待打补丁函数的临界区内,并输出检查结果,使得补丁激活线程根据所述检查结果,确定本业务线程被信号打断的地址均未位于待打补丁函数的临界区内时,修改所述待打补丁函数临界区的入口指令为跳转到补丁函数的跳转指令。
以及,本发明另一个实施例提供了一种通信设备,包括:
发送单元,用于向至少一个业务线程发送触发信号;
结果获得单元,用于获得与所述触发信号关联的所述至少一个业务线程的检查结果;
确定单元,用于根据所述至少一个业务线程的检查结果,确定所述业务线程被信号打断的地址均未位于待打补丁函数的临界区内,其中打断所述业务线程的信号包括所述触发信号;
改写单元,用于修改所述待打补丁函数临界区的入口指令为跳转到补丁函数的跳转指令。
以及,本发明另一个实施例提供了一种通信设备,包括:
接收单元,用于接收触发信号;
地址获得单元,用于获得本端被信号打断的地址,其中打断所述业务线程的信号包括所述触发信号;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910105200.2/2.html,转载请声明来源钻瓜专利网。