【技术实现步骤摘要】
目标应用的热更新方法和装置、存储介质和电子设备
本专利技术涉及计算机领域,具体而言,涉及一种目标应用的热更新方法和装置、存储介质和电子设备。
技术介绍
现网问题是不可避免的,每个线上项目或多或少会遇到一些问题。发现bug进行重启修复可能导致服务受损,热更新是一种在程序运行时动态修复内存中代码bug的技术,能避免进程重启导致的业务中断、保证服务的可用性。java从语言级别支持热更新,java进程运行时可以重新从编译好的class文件加载类,并对内存中的class做替换。C++则没有在语言级别支持热更新,C++游戏服务器端常见热更新有基于共享内存的方案。但该技术侵入性较大,给业务开发带来诸多不便,例如,对指针需要进行封装、使用标准模板库(StandardTemplateLibrary,简称STL)则要进行改造等。在操作系统级别也有基于动态库的热更新方案,但如果项目中用到了静态变量,如果采用动态库方案进行热更新,存在修复成本高的问题。针对相关技术中,在出现现网问题进行热更新时,由于项目中使用到了静态变量,基于动态库的热更新方案存在修复成本高的问题,尚未提出有效的解决方案。
技术实现思路
本专利技术实施例提供了一种目标应用的热更新方法和装置、存储介质和电子设备,以至少解决相关技术中,在出现现网问题进行热更新时,由于项目中使用到了静态变量,基于动态库的热更新方案不适用于对静态变量进行热更新的技术问题。根据本专利技术实施例的一个方面,提供了一种目标应用的热更新方法,包括:在当前运行的目 ...
【技术保护点】
1.一种目标应用的目标应用的热更新方法,其特征在于,包括:/n在当前运行的目标应用中的第一函数出现问题的情况下,使用链接脚本生成器根据目标应用的原始二进制文件生成目标链接脚本,对第一函数的补丁代码进行编译,得到目标文件,其中,所述第一函数的补丁代码用于修复所述第一函数出现的所述问题;/n根据所述目标链接脚本对所述目标文件进行链接,得到目标二进制文件;/n从所述目标二进制文件中抽取出目标代码段,并将所述目标代码段生成目标补丁包;/n将所述目标补丁包加载到目标进程地址空间中的目标预留地址,其中,所述目标进程地址空间用于存储所述当前运行的所述目标应用中的代码段和数据段;/n在所述第一函数的入口处指令被修改为目标跳转指令、且运行所述目标应用的过程中执行到所述第一函数的情况下,通过所述目标跳转指令跳转到所述目标预留地址,执行所述目标补丁包中的所述目标代码段,其中,所述目标跳转指令用于跳转到所述目标预留地址,并执行所述目标代码段。/n
【技术特征摘要】
1.一种目标应用的目标应用的热更新方法,其特征在于,包括:
在当前运行的目标应用中的第一函数出现问题的情况下,使用链接脚本生成器根据目标应用的原始二进制文件生成目标链接脚本,对第一函数的补丁代码进行编译,得到目标文件,其中,所述第一函数的补丁代码用于修复所述第一函数出现的所述问题;
根据所述目标链接脚本对所述目标文件进行链接,得到目标二进制文件;
从所述目标二进制文件中抽取出目标代码段,并将所述目标代码段生成目标补丁包;
将所述目标补丁包加载到目标进程地址空间中的目标预留地址,其中,所述目标进程地址空间用于存储所述当前运行的所述目标应用中的代码段和数据段;
在所述第一函数的入口处指令被修改为目标跳转指令、且运行所述目标应用的过程中执行到所述第一函数的情况下,通过所述目标跳转指令跳转到所述目标预留地址,执行所述目标补丁包中的所述目标代码段,其中,所述目标跳转指令用于跳转到所述目标预留地址,并执行所述目标代码段。
2.根据权利要求1所述的方法,其特征在于,所述使用链接脚本生成器根据目标应用的原始二进制文件生成目标链接脚本,包括:
根据所述目标应用的原始进程的所述原始二进制文件、以及预设的链接脚本模版生成所述目标链接脚本,其中,所述目标链接脚本的起始地址是根据所述链接脚本模版中的代码段起始地址、所述原始进程中的代码段起始地址到数据段起始地址所占的空间大小确定得到的,所述目标链接脚本的数据段的地址和所述原始二进制文件的数据段的地址一致,所述目标链接脚本的BSS段的地址和所述原始二进制文件的BSS段的地址一致。
3.根据权利要求2所述的方法,其特征在于,所述根据所述目标应用的原始进程的所述原始二进制文件、以及预设的链接脚本模版生成所述目标链接脚本,包括:
将原始进程中的代码段起始地址到数据段起始地址所占的空间大小、以及所述链接脚本模版中的代码段起始地址分别存储在所述链接脚本模版中,得到所述目标链接脚本,其中,所述原始二进制文件中的数据段在所述目标链接脚本中的起始地址为X+N*M,所述目标链接脚本在所述链接脚本模版中的起始地址为X+i*M,1≤i<N,X为所述链接脚本模版中的代码段起始地址,M为原始进程中的代码段起始地址到数据段起始地址所占的空间大小。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述目标进程地址空间的修改权限;
在获取到所述修改权限、且所述目标进程地址空间的访问权限为只读权限的情况下,将所述目标进程地址空间的访问权限修改为允许写权限;
在所述目标进程地址空间的访问权限为所述允许写权限的情况下,将所述第一函数的入口处指令修改为所述目标跳转指令。
5.根据权利要求4所述的方法,其特征在于,所述将所述目标进程地址空间的访问权限修改为允许写权限,包括:
在所述第一函数在所述目标进程地址空间中所在的内存页为第一内存页的情况下,将所述第一内存页的访问权限修改为所述允许写权限。
6.根据权利要求1所述的方法,其特征在于,所述将所述目标补丁包加载到目标进程地址空间中的目标预留地址,包括:
将所述目标补丁包映射到所述目标预留地址。
7.一种目标应用的目标应用的热更新装置,其特征在于,包括:
第一处理单元,用于在当前运行的目标应用中的第一函数出现问...
【专利技术属性】
技术研发人员:刘阳,张俊峰,叶峥铖,周长寿,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。