【技术实现步骤摘要】
本专利技术属于云软件可靠性研究中的安全领域,更具体地,涉及一种基于中间辅助函数的软件动态升级方法及系统。
技术介绍
软件在使用过程中需要不断的升级更新来修复漏洞和添加功能,然而传统的软件更新需要先关闭软件,更新完成后再重新启动软件。这样一方面软件服务会宕机一段时间,另一方面软件服务将会丢失更新前的状态。这对于需要7/24小时的软件服务而言,无疑是降低了服务的可用性。但是如果不采用更新的话,无疑会降低软件的安全性和服务可靠性。针对这个问题,软件动态升级方法能够在程序不停止服务的情况下完成程序的更新升级工作,并且能够保证软件更新前后服务状态不丢失,从而提高系统的可用性和可靠性。现有的动态软件升级方法中,针对正在调用中函数的更新,一般有两种方法,一种是等待待更新函数返回后再进行更新。另一种方法是基于安全更新点和堆栈重构的方法来完成更新,即等待线程执行到函数中的某个安全更新点时,对线程的函数栈进行堆栈重构工作,使旧版本函数的函数栈转换成新版本函数的函数栈,同时使线程跳转到安全更新点对应的新版本函数位置来进行更新工作。然而,上述两种方法都存在一定的不足和局限性。(1)等待待更新函数返回后再进行更新的方法无法更新一些不会返回的函数,例如主循环函数,调度函数等等,这些函数会一直处入函数栈中,如果一直得不到更新也会存在安全隐患;(2)基于检查点和堆栈重构的方法虽然可以在函数调用时更新函数, ...
【技术保护点】
一种基于中间辅助函数的软件动态升级方法,其特征在于,所述方法包括:(1)获取并整合旧版本代码源文件和新版本代码源文件,得到整合后的旧版本代码源文件和新版本代码源文件;(2)通过对比整合后的旧版本代码源文件和新版本代码源文件,生成初级动态升级补丁;(3)静态分析对比整合后的旧版本代码源文件和新版本代码源文件中的待更新函数,分析待更新函数的语义,生成函数语义映射表,同时根据待更新函数,生成中间辅助函数;(4)根据用户的初始化请求,将步骤(2)中生成的初级动态升级补丁注入到正在运行的待更新程序中;(5)注入动态升级补丁后,根据待更新函数符号名和待更新静态变量符号名获得待更新程序中对应的待更新函数和待更新静态变量地址;(6)根据用户发出的更新请求,暂停所有与更新相关的进程,并根据获取的待更新静态变量地址对待更新静态变量进行更新;同时,查看待更新函数是否位于函数调用栈,若是,则利用中间辅助函数对位于函数调用栈的待更新函数进行更新;否则直接对未在函数调用栈的待更新函数进行更新;(7)恢复因更新而被暂停的进程,更新过程结束。
【技术特征摘要】
1.一种基于中间辅助函数的软件动态升级方法,其特征在于,所述方
法包括:
(1)获取并整合旧版本代码源文件和新版本代码源文件,得到整合后
的旧版本代码源文件和新版本代码源文件;
(2)通过对比整合后的旧版本代码源文件和新版本代码源文件,生成
初级动态升级补丁;
(3)静态分析对比整合后的旧版本代码源文件和新版本代码源文件中
的待更新函数,分析待更新函数的语义,生成函数语义映射表,同时根据
待更新函数,生成中间辅助函数;
(4)根据用户的初始化请求,将步骤(2)中生成的初级动态升级补
丁注入到正在运行的待更新程序中;
(5)注入动态升级补丁后,根据待更新函数符号名和待更新静态变量
符号名获得待更新程序中对应的待更新函数和待更新静态变量地址;
(6)根据用户发出的更新请求,暂停所有与更新相关的进程,并根据
获取的待更新静态变量地址对待更新静态变量进行更新;同时,查看待更
新函数是否位于函数调用栈,若是,则利用中间辅助函数对位于函数调用
栈的待更新函数进行更新;否则直接对未在函数调用栈的待更新函数进行
更新;
(7)恢复因更新而被暂停的进程,更新过程结束。
2.如权利要求1所述的方法,其特征在于,所述步骤(3)具体包括:
(3-1)分析待更新函数的语义,获取并记录待更新函数的安全更新指
令集合,生成函数语义映射表;
(3-2)将待更新函数的参数作为中间辅助函数的参数,构造生成中间
辅助函数,所述中间辅助函数包含控制内容、待更新函数新版本内容和待
\t更新函数旧版本内容;其中,
所述控制内容用于将待更新函数旧版本的局部变量和参数转换成新版
本的局部变量和参数,还用于根据运行时线程执行地址来判断该线程是否
处于安全更新指令集合,若是,则跳转入待更新函数新版本内容,执行待
更新函数新版本内容后返回;否则,跳转入待更新函数旧版本内容,当执
行到安全更新指令集合中任意一条指令,则跳转入待更新函数新版本内容;
(3-3)对所述中间辅助函数的待更新函数旧版本内容进行修改,使其
利用转换函数访问新版本数据。
3.如权利要求2所述的方法,其特征在于,若一段指令中任意一条指
令前的所有执行路径都能保证新旧版本语义一致,则该段指令为安全更新
指令集合。
4.根据权利要求1或2所述的方法,其特征在于,所述步骤(6)具
体包括:
(6-1)根据用户发出的更新请求,暂停所有与更新相关的进程,将所
有的旧版本待更新静态变量转换成新版本静态变量;
(6-2)查看待更新函数是否位于函数调用栈,若是,根据步骤(3)的
函数语义映射表,修改线程当前执行位置后的下一条二进制指令,将线程
当前执行位置入栈,然后跳转到步骤(3)中生成中间辅助函数的入口地址;
否则,对于未处于函数调用栈的待更新函数,使用修改函数入口地址的方
法进行更新。
5.如权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
(1)在程序更新前保存待更新程序的检查点;
(2)在更新过程中,通过监控程序实时监控待更新程序状态,若待更
新程序发生异常时,使用所述检查点进行回滚,将其还原到更新之前的状
态。
6.一种基于中间辅助函数的软件动态升级系统,其特征在于,所述系
\t统包括:
整合模块,...
【专利技术属性】
技术研发人员:邹德清,代炜琦,陈志坤,金海,
申请(专利权)人:华中科技大学,
类型:发明
国别省市:湖北;42
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。