目标应用的热更新方法和装置、存储介质和电子设备制造方法及图纸

技术编号:25636598 阅读:9 留言:0更新日期:2020-09-15 21:29
本发明专利技术公开了一种目标应用的热更新方法和装置、存储介质和电子设备,包括:在当前运行的目标应用中的第一函数出现问题的情况下,使用链接脚本生成器根据目标应用的原始二进制文件生成目标链接脚本,对第一函数的补丁代码进行编译,得到目标文件;根据目标链接脚本对目标文件进行链接,得到目标二进制文件;从目标二进制文件中抽取出目标代码段,并将目标代码段生成目标补丁包;将目标补丁包加载到目标进程地址空间中的目标预留地址;在第一函数的入口处指令被修改为目标跳转指令、且运行目标应用的过程中执行到第一函数的情况下,通过目标跳转指令跳转到目标预留地址,执行目标补丁包中的目标代码段。

【技术实现步骤摘要】
目标应用的热更新方法和装置、存储介质和电子设备
本专利技术涉及计算机领域,具体而言,涉及一种目标应用的热更新方法和装置、存储介质和电子设备。
技术介绍
现网问题是不可避免的,每个线上项目或多或少会遇到一些问题。发现bug进行重启修复可能导致服务受损,热更新是一种在程序运行时动态修复内存中代码bug的技术,能避免进程重启导致的业务中断、保证服务的可用性。java从语言级别支持热更新,java进程运行时可以重新从编译好的class文件加载类,并对内存中的class做替换。C++则没有在语言级别支持热更新,C++游戏服务器端常见热更新有基于共享内存的方案。但该技术侵入性较大,给业务开发带来诸多不便,例如,对指针需要进行封装、使用标准模板库(StandardTemplateLibrary,简称STL)则要进行改造等。在操作系统级别也有基于动态库的热更新方案,但如果项目中用到了静态变量,如果采用动态库方案进行热更新,存在修复成本高的问题。针对相关技术中,在出现现网问题进行热更新时,由于项目中使用到了静态变量,基于动态库的热更新方案存在修复成本高的问题,尚未提出有效的解决方案。
技术实现思路
本专利技术实施例提供了一种目标应用的热更新方法和装置、存储介质和电子设备,以至少解决相关技术中,在出现现网问题进行热更新时,由于项目中使用到了静态变量,基于动态库的热更新方案不适用于对静态变量进行热更新的技术问题。根据本专利技术实施例的一个方面,提供了一种目标应用的热更新方法,包括:在当前运行的目标应用中的第一函数出现问题的情况下,使用链接脚本生成器根据目标应用的原始二进制文件生成目标链接脚本,对第一函数的补丁代码进行编译,得到目标文件,其中,上述第一函数的补丁代码用于修复上述第一函数出现的上述问题;根据上述目标链接脚本对上述目标文件进行链接,得到目标二进制文件;从上述目标二进制文件中抽取出目标代码段,并将上述目标代码段生成目标补丁包;将上述目标补丁包加载到目标进程地址空间中的目标预留地址,其中,上述目标进程地址空间用于存储上述当前运行的上述目标应用中的代码段和数据段;在上述第一函数的入口处指令被修改为目标跳转指令、且运行上述目标应用的过程中执行到上述第一函数的情况下,通过上述目标跳转指令跳转到上述目标预留地址,执行上述目标补丁包中的上述目标代码段,其中,上述目标跳转指令用于跳转到上述目标预留地址,并执行上述目标代码段。根据本专利技术实施例的另一方面,还提供了一种目标应用的热更新装置,包括:第一处理单元,用于在当前运行的目标应用中的第一函数出现问题的情况下,使用链接脚本生成器根据目标应用的原始二进制文件生成目标链接脚本,对第一函数的补丁代码进行编译,得到目标文件,其中,上述第一函数的补丁代码用于修复上述第一函数出现的上述问题;链接单元,用于根据上述目标链接脚本对上述目标文件进行链接,得到目标二进制文件;第二处理单元,用于从上述目标二进制文件中抽取出目标代码段,并将上述目标代码段生成目标补丁包;加载单元,用于将上述目标补丁包加载到目标进程地址空间中的目标预留地址,其中,上述目标进程地址空间用于存储上述当前运行的上述目标应用中的代码段和数据段;第三处理单元,用于在上述第一函数的入口处指令被修改为目标跳转指令、且运行上述目标应用的过程中执行到上述第一函数的情况下,通过上述目标跳转指令跳转到上述目标预留地址,执行上述目标补丁包中的上述目标代码段,其中,上述目标跳转指令用于跳转到上述目标预留地址,并执行上述目标代码段。根据本专利技术实施例的又一方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述目标应用的热更新方法的各种可选实现方式中提供的方法。根据本专利技术实施例的又一方面,还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,上述处理器通过计算机程序执行上述目标应用的热更新方法。在本专利技术实施例中,在当前运行的目标应用运行过程中,当该目标应用中的第一函数出现问题的情况下,首先通过链接脚本生成器使用链接脚本生成器根据目标应用的原始二进制文件生成目标链接脚本,对第一函数的补丁代码进行编译,得到目标文件,该第一函数的补丁代码用于修复第一函数出现的上述问题;然后,根据上述目标链接脚本对上述目标文件进行链接,得到目标二进制文件;接着,从上述目标二进制文件中抽取出目标代码段,并将该目标代码段生成目标补丁包;将该目标补丁包加载到目标进程地址空间中的目标预留地址,该目标进程地址空间用于存储上述当前运行的上述目标应用中的代码段和数据段;在该第一函数的入口处指令被修改为目标跳转指令、且运行上述目标应用的过程中执行到上述第一函数的情况下,通过上述目标跳转指令使目标应用跳转到上述目标预留地址,执行上述目标补丁包中的上述目标代码段。通过上述方式,在目标应用的运行过程中,当运行到目标应用中的出现问题的第一函数时,能够通过上述目标跳转指令,使目标应用跳转到目标预留地址,执行第一函数对应的目标补丁包中的目标代码段,保证目标应用能够正常运行,通过这种跳转指令,当执行到有问题的函数时跳转到补丁包的代码段中执行,可以用较低成本修复目标应用中出现的问题,解决了相关技术中修复成本高的问题,不仅提高了目标应用的运营效率,而且提高了用户体验。附图说明此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1是根据本专利技术实施例的一种目标应用的热更新方法的应用环境的示意图;图2是根据本专利技术实施例的一种可选的目标应用的热更新方法的流程示意图;图3是根据本专利技术实施例的一种可选的热更新框架的示意图;图4是根据本专利技术实施例的一种可选的生成目标链接脚本的示意图;图5是根据本专利技术实施例的一种可选的目标预留地址的示意图;图6是根据本专利技术实施例的另一种可选的目标应用的热更新方法的流程示意图;图7是根据本专利技术实施例的一种可选的目标应用的热更新装置的结构示意图;图8是根据本专利技术实施例的另一种可选的目标应用的热更新装置的结构示意图;图9是根据本专利技术实施例的一种可选的电子设备的结构示意图。具体实施方式为了使本
的人员更好地理解本专利技术方案,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分的实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本专利技术保护的范围。需要说明的是,本专利技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情本文档来自技高网
...

【技术保护点】
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

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

1