[发明专利]补丁加载方法及装置有效
申请号: | 201410033575.3 | 申请日: | 2014-01-23 |
公开(公告)号: | CN103744709B | 公开(公告)日: | 2017-02-15 |
发明(设计)人: | 刘中柱 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445 |
代理公司: | 北京同立钧成知识产权代理有限公司11205 | 代理人: | 刘芳 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 补丁 加载 方法 装置 | ||
技术领域
本发明实施例涉及通信技术,尤其涉及一种补丁加载方法及装置。
背景技术
应用程序是为了完成某项或某几项特定任务而被开发运行于操作系统之上的计算机程序。每一个应用程序运行于独立的进程,且拥有自己独立的地址空间。但应用程序在应用过程中可能存在一定的缺陷,需后续维护时编写修复该缺陷的程序作为补丁代码,进程运行该应用程序时加载补丁代码,以保证进程顺利运行。
目前的补丁加载方案,通常先离线将补丁代码编译链接为目标文件;再以待修复软件的符号绝对地址为依据,将目标文件制作成待修复软件中原有函数和补丁代码中补丁函数的替换对应关系的绝对地址镜像文件;待绝对地址镜像文件被加载到设备后,根据上述替换对应关系确定需要打补丁的原有函数,以及原有函数和补丁函数的地址,并将原有函数的入口指令修改为跳转指令,跳转到补丁函数入口处,从而实现在中央处理器(Central Processing Unit,简称:CPU)执行到原有函数时,补丁函数将被执行。
对于多版本应用程序,采用上述补丁加载方案进行补丁加载时,生成多份绝对地址镜像文件,导致补丁代码管理和维护的难度。
发明内容
本发明实施例提供一种补丁加载方法及装置,以解决现有的补丁加载方案中补丁代码管理和维护难度高的问题。
第一方面,本发明实施例提供一种补丁加载方法,包括:
编译补丁代码生成可重定位的动态链接库,所述补丁代码为以补丁函数为单位的指令;
解析包含所述补丁代码的补丁镜像文件,获取所述补丁镜像文件中的重定位函数信息,建立所述补丁镜像文件和目标进程的连接关系,所述目标进程为加载所述补丁代码后的应用程序在运行时所处的进程;
根据所述补丁镜像文件和目标进程的连接关系,修改原有函数入口指令,跳转执行所述补丁函数。
结合第一方面,在第一方面的第一种可能的实现方式中,所述解析包含所述补丁代码的补丁镜像文件,获取所述补丁镜像文件中的重定位函数信息,建立所述补丁镜像文件和目标进程的连接关系之前,所述方法还包括:
找出目标进程中加载的镜像文件,采用可执行的链接格式ELF解析所述镜像文件,获取所述镜像文件中的原有函数和原有全局变量对应的名称和绝对地址,得到所述目标进程的符号表,所述符号表包含所述原有函数和所述原有全局变量对应的名称。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述解析包含所述补丁代码的补丁镜像文件,获取所述补丁镜像文件中的重定位函数信息,建立所述补丁镜像文件和目标进程的连接关系,包括:
分析所述补丁镜像文件,记录所述补丁镜像文件中的补丁函数和补丁全局变量的名称和相对地址;
分析所述补丁镜像文件中的重定位段,获取重定位函数和重定位全局变量的名称和相对地址;
根据所述重定位函数和重定位全局变量的名称和相对地址,建立所述补丁镜像文件和目标进程的连接关系。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述根据所述补丁镜像文件和目标进程的连接关系,修改原有函数入口指令,跳转执行所述补丁函数,包括:
在所述目标进程的符号表中,查找所述重定位函数名称和/或所述重定位全局变量名称;
若确定所述重定位函数名称和所述重定位全局变量名称存在于所述目标进程中,则将其标记为目标进程内函数或目标进程内变量;
将所述目标进程内函数和/或目标进程内变量从所述重定位段中移除,并调用系统的动态链接库加载函数重定位所述动态链接库中的符号;以及,
根据所述补丁镜像文件的加载内存地址及所述目标进程内函数和所述目标进程内变量的相对地址,得到所述目标进程内函数和所述目标进程内变量的重定位地址并写入;
修改所述原有函数的入口指令,跳转执行所述补丁函数。
结合第一方面、第一方面的第一种至第三种可能的实现方式中的任意一种,在第一方面的第四种可能的实现方式中,所述根据所述补丁镜像文件和目标进程的连接关系,修改所述原有函数的入口指令,跳转执行所述补丁函数之前,所述方法还包括:
调用补丁初始化入口函数,完成所述补丁镜像文件的初始化。
第二方面,本发明实施例提供一种补丁加载装置,包括:
编译模块,用于编译补丁代码生成可重定位的动态链接库,所述补丁代码为以补丁函数为单位的指令;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410033575.3/2.html,转载请声明来源钻瓜专利网。