使用补丁对软件进行动态升级与控制的方法和装置制造方法及图纸

技术编号:3914126 阅读:140 留言:0更新日期:2012-04-11 18:40
本发明专利技术提出了使用补丁对软件进行动态升级的方法,包括以下步骤:将替换函数的预定参数从目标文件中提取出来,组成仅包含替换函数的新目标文件;以及根据新目标文件和内核镜像原文件生成补丁。此外,本发明专利技术还提出了使用补丁对软件进行动态升级与控制的装置。通过实施本发明专利技术,可以大大减少加载补丁时所需的内存空间。

【技术实现步骤摘要】

本专利技术涉及补丁升级方法,更具体地,涉及使用补丁对软件进行动态升级与控制 的方法和装置。
技术介绍
随着软件规模和维护复杂度的不断增加,人们很难获得一个零错误的软件,这就 需要在发布版本之后,对可能存在的错误,采用提供新软件或者通过发布软件补丁的方式 进行修复。对于软件运行稳定性要求比较高的行业,特别是电信行业,需要在不影响原有业 务正常运行的情况下,完成对系统软件错误修复的整个过程,即在软件运行过程中,用补丁 模块替换存在软件错误的模块,而不能打断原有程序代码的正常运行。这种动态补丁升级软件的主要方法是采用函数替换的方法,来实现动态打补丁, 其工作原理是通过替换被补丁函数的第一条指令为跳转到替换函数中的指令,使程序跳转 到新函数所在位置处执行,当替换函数中的补丁代码执行完毕后,回到调用老函数的代码 中,从而完成整个调用过程。在公开号为CN1475909的中国申请专利文件中,公开了一种嵌入式系统补丁软件 的实现和控制方法。此方法分为两步骤执行1)用补丁制作工具分析补丁目标文件的符号 段,并将补丁目标文件的代码段和数据段提取出来,联同函数替换表以补丁单元的形式生 成补丁文件。2)补丁控制部分加载控制补丁软件到希望被补丁修改的缓冲区中,根据函数 替换表构造函数跳转指令,将被补丁函数地址上的第一条指令替换为跳转到补丁函数起始 地址的函数跳转指令,使CPU执行到被补丁函数时,跳转到补丁函数地址,执行补丁函数。该专利中关于动态补丁升级软件实现与控制的方法,存在如下缺陷1)该专利在软件补丁制作过程中,把整个目标文件的代码段和数据段都提取出 来,然后构造成补丁文件,并在补丁加载时全部写入内存空间。这种方法会造成内存空间的 浪费,也会增加加载过程的复杂度,甚至同一个函数或变量在内存中有多个拷贝,可能会造 成函数调用或变量引用的不一致,严重的会导致系统崩溃。2)该专利在补丁控制模块加载补丁文件到缓冲区中后,根据函数替换表构造函数 跳转指令,动态的构造从被补丁函数跳转到替换函数的跳转指令。这种在目标机上构造跳 转指令的做法会增加目标机侧代码维护的难度,并降低代码可移植性。3)该专利没有提供完整的补丁控制方法,即没有提供打补丁失败后,恢复到原先 状态的实现方法以及显示补丁是否升级成功等。
技术实现思路
为解决上述缺陷,本专利技术提出了使用补丁对软件进行动态升级的方法,包括以下 步骤将替换函数的预定参数从目标文件中提取出来,组成仅包含替换函数的新目标文件; 以及根据新目标文件和内核镜像原文件生成补丁。其中,预定参数包括代码段、数据段、重定位表和符号表中的至少一个。其中,所述的提取预定参数的步骤包括读取目标文件的头部信息,并根据头部信 息将每个节头读取到内存中;以及提取替换函数的代码段,收集替换函数的重定位的信息, 并提取替换函数的只读数据,其中,将只读数据节合并为新只读数据节。其中,使用验证模块读取新目标文件,以验证新目标文件的正确性。其中,所述的生成补丁的步骤还包括读取新目标文件的头部信息,并根据头部信 息将每个节头读取到内存中;合并新目标文件的代码段和只读数据节;读取内核镜像原文件 的预留补丁区域地址和符号地址表;根据符号地址表对新目标文件的符号进行重定位;根据 预留补丁区域地址构造函数替换指令表,用于指示对替换函数进行替换;以及生成补丁。此外,本专利技术还提出了使用补丁对软件进行动态升级与控制的装置包括替换函 数提取模块,设置在主机侧,用于将替换函数的预定参数从目标文件中提取出来,组成仅包 含替换函数的新目标文件;补丁生成模块,设置在主机侧,用于根据新目标文件和内核镜像 原文件生成补丁 ;以及补丁控制模块,设置在目标机侧,用于控制补丁的状态的转换,并用 于查询补丁的状态。其中,替换函数提取模块包括头部信息读取子模块,用于读取目标文件的头部信 息,并根据头部信息将每个节头读取到内存中;预定参数提取子模块,用于提取预定参数; 以及文件重组子模块,用于组成仅包含替换函数的新目标文件。其中,补丁生成模块在生成补丁的过程中,根据从内核镜像原文件读取的预留补 丁区域地址构造函数替换指令表。其中,补丁控制模块包括补丁加载子模块,读取函数替换指令表,根据预留补丁 区域地址加载补丁,并将补丁的非激活状态写入配置文件中;补丁激活子模块,根据函数替 换指令表,从原函数跳转至替换函数,并将补丁的激活状态写入配置文件中;补丁自动激活 子模块,使补丁自动生效,并将补丁的自动运行状态写入配置文件中;补丁去激活子模块, 根据函数替换指令表,从替换函数跳转回原函数,并将补丁的非激活状态写入配置文件;补 丁卸载子模块,释放补丁的存储空间,从替换函数跳转回原函数,并将补丁的初始状态写入 配置文件;以及补丁状态查询子模块,用于读取配置文件以查看补丁的状态。其中,补丁包含如下信息中的至少一个补丁的版本信息、目标机的信息、用于对 替换函数进行替换的指令表以及替换函数的预定参数在目标机中的加载地址。本专利技术的技术效果在于1)在制作软件补丁时,根据需要打补丁的函数,把代码段的提取细化到函数级,这 样可以减少补丁的尺寸,以及加载补丁所需要的预留内存空间,并且便于管理,避免函数调 用的不一致性。2)从补丁函数跳转到替换函数的跳转指令在制作补丁的时候完成,并存储在补丁 文件中。这样可以把与平台相关的处理全部放在主机侧制作补丁时实现,而目标机上只要 做加载的动作,这样可避免由于目标机上处理器的不同而增加编码的复杂度,降低移植性。3)提供完整的目标机侧补丁控制模块功能,可以根据要求加载,激活,去激活,卸 载,显示补丁信息等。附图说明此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的限定。在附图中图1是根据本专利技术示例性实施例的嵌入式系统动态补丁升级软件总体框图;图2是根据本专利技术示例性实施例的替换函数提取过程的流程图;图3是根据本专利技术示例性实施例的补丁生成过程的流程图;以及图4示出了根据本专利技术示例性实施例的补丁状态转化的示意图。具体实施例方式下面结合附图对使用补丁对软件进行动态升级与控制的方法和装置进行说明。嵌入式系统动态补丁升级软件分为主机侧和目标机侧两个部分,一共包括3个模 块替换函数提取模块,补丁生成模块,补丁控制模块。其中替换函数提取模块,补丁生成模 块运行在主机侧,补丁控制模块运行在目标机侧,如图1。(一)替换函数提取模块为动态补丁升级软件的第一个模块,用来在ELF格式目标 文件中提取替换函数的代码段,重定位表,符号表等,并重构成新的ELF格式目标文件。该模块的输入为ELF格式的目标文件和需要提取的替换函数名列表,输出为只含 有单个替换函数代码段,只读数据节,符号表等的ELF格式目标文件。在构造的过程中,需根据重定位的类型,把以.text (程序代码)、.bss (全局变 量)、.rodata (只读数据)、.data (定值数据)作为基地址的偏移量addend的重定位方法, 替换为直接查找符号的方式。这样在下一个模块补丁制作模块中,只需要通过查找镜像文 件中符号的真实地址,去替换ELF目标文件中符号,就可以完成重定位的工作,把函数调用 和变量引用链接起来。该模块的实施步骤为(可参考图2)1.本文档来自技高网
...

【技术保护点】
一种使用补丁对软件进行动态升级的方法,其特征在于,包括以下步骤:将替换函数的预定参数从目标文件中提取出来,组成包含所述替换函数的新目标文件;以及根据所述新目标文件和所述替换函数的内核镜像原文件生成补丁。

【技术特征摘要】

【专利技术属性】
技术研发人员:黄忠华朱怀云邱静李进波
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

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

1