[发明专利]目标应用的热更新方法和装置、存储介质和电子设备有效
申请号: | 202010628955.7 | 申请日: | 2020-07-02 |
公开(公告)号: | CN111666096B | 公开(公告)日: | 2021-03-16 |
发明(设计)人: | 刘阳;张俊峰;叶峥铖;周长寿 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F8/656 | 分类号: | G06F8/656;G06F8/41 |
代理公司: | 北京康信知识产权代理有限责任公司 11240 | 代理人: | 王晓婷 |
地址: | 518000 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 目标 应用 更新 方法 装置 存储 介质 电子设备 | ||
本发明公开了一种目标应用的热更新方法和装置、存储介质和电子设备,包括:在当前运行的目标应用中的第一函数出现问题的情况下,使用链接脚本生成器根据目标应用的原始二进制文件生成目标链接脚本,对第一函数的补丁代码进行编译,得到目标文件;根据目标链接脚本对目标文件进行链接,得到目标二进制文件;从目标二进制文件中抽取出目标代码段,并将目标代码段生成目标补丁包;将目标补丁包加载到目标进程地址空间中的目标预留地址;在第一函数的入口处指令被修改为目标跳转指令、且运行目标应用的过程中执行到第一函数的情况下,通过目标跳转指令跳转到目标预留地址,执行目标补丁包中的目标代码段。
技术领域
本发明涉及计算机领域,具体而言,涉及一种目标应用的热更新方法和装置、存储介质和电子设备。
背景技术
现网问题是不可避免的,每个线上项目或多或少会遇到一些问题。发现bug进行重启修复可能导致服务受损,热更新是一种在程序运行时动态修复内存中代码bug的技术,能避免进程重启导致的业务中断、保证服务的可用性。
java从语言级别支持热更新,java进程运行时可以重新从编译好的class文件加载类,并对内存中的class做替换。C++则没有在语言级别支持热更新,C++游戏服务器端常见热更新有基于共享内存的方案。但该技术侵入性较大,给业务开发带来诸多不便,例如,对指针需要进行封装、使用标准模板库(Standard Template Library,简称STL)则要进行改造等。在操作系统级别也有基于动态库的热更新方案,但如果项目中用到了静态变量,如果采用动态库方案进行热更新,存在修复成本高的问题。
针对相关技术中,在出现现网问题进行热更新时,由于项目中使用到了静态变量,基于动态库的热更新方案存在修复成本高的问题,尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种目标应用的热更新方法和装置、存储介质和电子设备,以至少解决相关技术中,在出现现网问题进行热更新时,由于项目中使用到了静态变量,基于动态库的热更新方案不适用于对静态变量进行热更新的技术问题。
根据本发明实施例的一个方面,提供了一种目标应用的热更新方法,包括:在当前运行的目标应用中的第一函数出现问题的情况下,使用链接脚本生成器根据目标应用的原始二进制文件生成目标链接脚本,对第一函数的补丁代码进行编译,得到目标文件,其中,上述第一函数的补丁代码用于修复上述第一函数出现的上述问题;根据上述目标链接脚本对上述目标文件进行链接,得到目标二进制文件;从上述目标二进制文件中抽取出目标代码段,并将上述目标代码段生成目标补丁包;将上述目标补丁包加载到目标进程地址空间中的目标预留地址,其中,上述目标进程地址空间用于存储上述当前运行的上述目标应用中的代码段和数据段;在上述第一函数的入口处指令被修改为目标跳转指令、且运行上述目标应用的过程中执行到上述第一函数的情况下,通过上述目标跳转指令跳转到上述目标预留地址,执行上述目标补丁包中的上述目标代码段,其中,上述目标跳转指令用于跳转到上述目标预留地址,并执行上述目标代码段。
根据本发明实施例的另一方面,还提供了一种目标应用的热更新装置,包括:第一处理单元,用于在当前运行的目标应用中的第一函数出现问题的情况下,使用链接脚本生成器根据目标应用的原始二进制文件生成目标链接脚本,对第一函数的补丁代码进行编译,得到目标文件,其中,上述第一函数的补丁代码用于修复上述第一函数出现的上述问题;链接单元,用于根据上述目标链接脚本对上述目标文件进行链接,得到目标二进制文件;第二处理单元,用于从上述目标二进制文件中抽取出目标代码段,并将上述目标代码段生成目标补丁包;加载单元,用于将上述目标补丁包加载到目标进程地址空间中的目标预留地址,其中,上述目标进程地址空间用于存储上述当前运行的上述目标应用中的代码段和数据段;第三处理单元,用于在上述第一函数的入口处指令被修改为目标跳转指令、且运行上述目标应用的过程中执行到上述第一函数的情况下,通过上述目标跳转指令跳转到上述目标预留地址,执行上述目标补丁包中的上述目标代码段,其中,上述目标跳转指令用于跳转到上述目标预留地址,并执行上述目标代码段。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010628955.7/2.html,转载请声明来源钻瓜专利网。