[发明专利]一种补丁实现方法及装置在审
申请号: | 201610595842.5 | 申请日: | 2016-07-25 |
公开(公告)号: | CN107656753A | 公开(公告)日: | 2018-02-02 |
发明(设计)人: | 周淼;王丽平 | 申请(专利权)人: | 中兴通讯股份有限公司 |
主分类号: | G06F8/70 | 分类号: | G06F8/70 |
代理公司: | 深圳鼎合诚知识产权代理有限公司44281 | 代理人: | 江婷,李发兵 |
地址: | 518057 广东省深圳市*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 补丁 实现 方法 装置 | ||
技术领域
本发明涉及通信和计算机领域,特别涉及一种补丁实现方法及装置。
背景技术
软件版本在使用过程中常常需要补丁在不重启设备的情况下,对当前软件版本的缺陷进行修改,目前广泛应用的嵌入式系统,一方面镜像版本文件使用静态链接,符号地址在编译后即是固定地址,不会因为加载顺序和加载设备的不同而改变,另一方面软件规模较小,代码段和数据段之间跳转都是短地址跳转(在32M之内),使用短跳转就可以完成函数之间的调用。根据当前嵌入式系统的两个特点,动态补丁技术通常都是替换被补丁函数序言部分的第一条指令,将其修改为跳转指令,跳转到修复函数所在代码段执行,以实现对故障函数的替换。但是随着嵌入式系统软件规模的增大以及模块化的使用,动态库的应用成为必然发展趋势,目前的补丁制作和使用方式由于以下原因无法对动态库中函数故障进行动态补丁修复,一方面由于动态库加载的地址具有不确定性,同一个镜像版本文件运行在不同的设备上,动态库加载的地址也会不一致,所以在制作补丁文件的时候无法确认补丁函数所在的内存地址,也无法确认补丁函数中重定位选项的内存地址,另一方面由于嵌入式系统软件规模的日益增大,软件中代码段、数据段的地址范围就会超出短地址(32M)的大小,这样在动态补丁中修改重定位的跳转指令时,就会发现地址大小超过指令范围,单指令跳转就会出现问题。针对以上问题,目前尚未提出有效的解决方案。
发明内容
本发明提供了一种补丁方法及装置,以至少现有技术中所以在制作补丁文件的时候无法确认补丁函数所在的内存地址,也无法确认补丁函数中重定位选项的内存地址,软件中代码段、数据段的地址范围就会超出短地址(32M)的大小,造成无法对动态库中函数故障进行补丁修复的问题。
根据本发明的一方面,提供了,一种补丁方法,包括根据提取被补丁函数和补丁重定位段的符号所在文件以及偏移地址,为补丁文件预留的内存区地址生成补丁文件,并将所述补丁文件加载至内存,其中,所述所在文件、所述偏移地址以及为所述补丁文件预留的内存区地址信息存储在镜像文件和动态库文件的符号表中;获取所述补丁文件内重定位段的符号的绝对地址;根据所述绝对地址在所述预留的内存区中构造指定字节跳转指令区,其中,所述跳转指令区用于当前执行指令跳转到重定位表项中目标符号的地址;修改所述被补丁函数入口指令以跳转至所述补丁文件中的补丁函数。
进一步地,所述方法还包括补丁文件还包括补丁函数信息,其中所述补丁函数信息包括代码段,数据段,只读数据段,重定位段信息。
进一步地,所述方法还包括所述补丁函数信息从补丁函数目标文件中提取得到。
进一步地,所述方法还包括所述根据所述绝对地址在所述预留的内存区中构造指定字节跳转指令区包括:根据所述绝对地址构造代码段和数据段,以得到所述指定字节跳转指令区;其中,所述代码段包括将PC寄存器加8的内容赋给IP寄存器,将IP寄存器的内容赋给PC寄存器;所述数据段包括当前地址加4,调用函数地址。
进一步地,所述方法还包括所述指定字节跳转指令区的长度为16字节。
进一步地,所述方法还包括所述补丁文件还包括补丁管理头部,其中所述补丁管理头部包括补丁版本号、补丁名字、补丁生成时间和补丁检验码信息。
进一步地,所述方法还包括获取所述补丁文件内重定位段的符号的绝对地址包括:若所述补丁文件内重定位段中的符号为外部符号,获取所述符号在镜像文件或动态库文件中的相对地址;在所述补丁文件加载到目标机侧后,所述相对地址加上所述镜像文件或动态库文件首地址的绝对地址以得到所述补丁文件内重定位段的符号的绝对地址。
根据本发明的另一方面,还提供了一种补丁实现装置,包括,生成模块,用于根据提取的被补丁函数和补丁重定位段的符号所在文件以及偏移地址、为补丁文件预留的内存区地址生成补丁文件,并将所述补丁文件加载至内存,其中,所述所在文件、所述偏移地址以及为所述补丁文件预留的内存区地址信息存储在镜像文件和动态库文件的符号表中;获取模块,用于获取所述补丁文件内重定位段的符号的绝对地址;构造模块,用于根据所述绝对地址在所述预留的内存区中构造指定字节跳转指令区,其中,所述跳转指令区用于将当前执行指令跳转到重定位表项中目标符号的地址;修改模块,用于修改所述被补丁函数入口指令以跳转至所述补丁文件中的补丁函数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中兴通讯股份有限公司,未经中兴通讯股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610595842.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种设备版本管控方法及装置
- 下一篇:恢复设置参数的方法及其用户设备