程序更新方法和装置制造方法及图纸

技术编号:36450200 阅读:19 留言:0更新日期:2023-01-25 22:46
本申请提供了一种程序更新方法和装置,该方法包括:向处于运行状态的目标程序内加载目标动态链接库,目标程序的代码为基于C或者C++语言编写的,目标动态链接库包括:至少一个更新函数,更新函数为用于更新目标程序内需要更新的原始函数的函数;确定更新函数对应的原始函数在目标程序内的第一函数地址;确定更新函数在目标动态链接库的第二函数地址;确定目标程序中用于调用原始函数的至少一个调用函数,将调用函数中原始函数的第一函数地址替换为原始函数对应的更新函数的第二函数地址,以完成目标程序的更新。本申请的方案可以使得基于C或者C++语言开发的程序能够在运行状态完成更新,降低了该种程序更新的复杂度。降低了该种程序更新的复杂度。降低了该种程序更新的复杂度。

【技术实现步骤摘要】
程序更新方法和装置


[0001]本申请涉及计算机
,尤其涉及一种程序更新方法和装置。

技术介绍

[0002]热更新是指在程序运行的过程中实现的即时更新。
[0003]通过热更新技术可以实现在不退出应用程序的前提下,完成应用程序的更新,从而提升应用程序的用户使用体验。如,以游戏为例,已开发出的游戏中可能会存在漏洞或者其他需要修复的代码,通过热更新技术可以在无需游戏玩家下线的前提下,完成游戏的更新,从而不会影响到游戏玩家的游戏体验。但是,目前采用C或者C++语言开发的程序日益增多,而由于C或者C++语言的特性,对于采用C或者C++语言开发的程序无法自动完成热更新的,必须需要退出程序之后才可以实现程序的更新,这必然导致了基于C或者C++代码的程序的更新复杂度较高。

技术实现思路

[0004]本申请提供了一种程序更新方法和装置,以使得基于C或者C++语言开发的程序能够在运行状态下完成更新,降低了该种程序更新的复杂度。
[0005]一方面,本申请提供了一种程序更新方法,包括:
[0006]向处于运行状态的目标程序内加载目标动态链接库,所述目标程序的代码为基于C或者C++语言编写的,所述目标动态链接库包括:至少一个更新函数,所述更新函数为用于更新所述目标程序内需要更新的原始函数的函数;
[0007]确定所述更新函数对应的原始函数在所述目标程序内的第一函数地址;
[0008]确定所述更新函数在所述目标动态链接库的第二函数地址;
[0009]确定所述目标程序中用于调用所述原始函数的至少一个调用函数,将所述调用函数中所述原始函数的第一函数地址替换为所述原始函数对应的更新函数的第二函数地址,以完成所述目标程序的更新。
[0010]在一种可能的实现方式中,在所述向处于运行状态的目标程序内加载目标动态链接库之前,还包括:
[0011]启动目标程序,通过目标程序的编译程序编译所述目标程序,所述编译程序中包括导出子函数;
[0012]在通过所述编译程序编译所述目标程序的过程中,通过所述导出子函数将所述目标程序中的函数的函数名称和函数地址导出到所述目标程序的第一导出表空间,所述第一导出表空间内的数据可供所述目标程序之外的其他程序访问;
[0013]所述确定所述更新函数对应的原始函数在所述目标程序内的第一函数地址,包括:
[0014]基于所述更新函数的函数名称,从所述第一导出表空间查询所述更新函数对应的原始函数在所述目标程序中的第一函数地址。
[0015]在又一种可能的实现方式中,所述目标动态链接库的第二导出表空间内存储有所述目标动态链接库内的函数的函数名称以及函数地址;
[0016]其中,所述第二导出表空间内存储的函数名称和函数地址为编译所述目标动态链接库时,导入到所述第二导出表空间内的;
[0017]所述第二导出表空间内的数据可供所述目标动态链接库之外的其他程序访问。
[0018]在又一种可能的实现方式中,所述向处于运行状态的目标程序内加载目标动态链接库,包括:
[0019]调用操作系统中的加载函数,通过所述加载函数向处于运行状态的所述目标程序内加载目标动态链接库。
[0020]在又一种可能的实现方式中,所述目标动态链接库中还包括:用于实现程序热更新的更新执行程序的代码;
[0021]所述方法还包括:
[0022]执行所述更新执行程序的代码,以通过所述更新执行程序执行确定所述第一函数地址、第二函数地址以及完成所述目标应用程序的更新的操作。
[0023]在又一种可能的实现方式中,所述向处于运行状态的目标程序内加载目标动态链接库,包括:
[0024]启动注入程序;
[0025]通过所述注入程序向处于运行状态的目标程序内注入目标动态链接库。
[0026]在又一种可能的实现方式中,通过所述注入程序执行确定所述第一函数地址、第二函数地址,以及将所述调用函数中所述原始函数的第一函数地址替换为所述原始函数对应的更新函数的第二函数地址的操作。
[0027]在又一种可能的实现方式中,所述将所述调用函数中所述原始函数的第一函数地址替换为所述原始函数对应的更新函数的第二函数地址,包括:
[0028]如果所述调用函数所需调用的原始函数处于被执行状态,等待所述原始函数执行完毕后,将所述调用函数中所述原始函数的第一函数地址替换为所述原始函数对应的更新函数的第二函数地址;
[0029]如果所述调用函数所需调用的原始函数未处于执行状态,将所述调用函数中所述原始函数的第一函数地址替换为所述原始函数对应的更新函数的第二函数地址。
[0030]在又一种可能的实现方式中,在所述将所述调用函数中所述原始函数的第一函数地址替换为所述原始函数对应的更新函数的第二函数地址之前,还包括:
[0031]如果检测到缓存中存储有所述目标程序的数据,清空所述缓存中存储的所述目标程序的数据。
[0032]又一方面,本申请还提供了一种程序更新装置,包括:
[0033]库加载单元,用于向处于运行状态的目标程序内加载目标动态链接库,所述目标程序的代码为基于C或者C++语言编写的,所述目标动态链接库包括:至少一个更新函数,所述更新函数为用于更新所述目标程序内需要更新的原始函数的函数;
[0034]第一地址确定单元,用于确定所述更新函数对应的原始函数在所述目标程序内的第一函数地址;
[0035]第二地址确定单元,用于确定所述更新函数在所述目标动态链接库的第二函数地
址;
[0036]更新替换单元,用于确定所述目标程序中用于调用所述原始函数的至少一个调用函数,将所述调用函数中所述原始函数的第一函数地址替换为所述原始函数对应的更新函数的第二函数地址,以完成所述目标程序的更新。
[0037]由以上可知,在本申请实施例中,对于目标程序为采用C或者C++语言开发的程序,本申请可以预先生成该目标程序对应的目标动态链接库,该目标动态链接库中包括:用于更新该目标程序内待更新的各原始函数的至少一个更新函数。在此基础上,通过向处于运行状态的目标程序内加载该目标动态链接库,将目标程序中需要调用原始函数的调用函数中该原始函数的函数地址替换为该目标动态链接库中相应更新函数的函数地址,便可以实现利用目标动态链接库中的更新函数替换目标程序中待更新的原始函数,从而可以在目标程序处于运行状态下,完成该目标程序的更新,自然也就无需先中断目标程序的运行再重新利用新版本的目标程序来进行更新,降低了目标程序更新的复杂度。
附图说明
[0038]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0039]图1示出了本申请实施例提供的程序更新方法的一种流程示意图;
[0040]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种程序更新方法,其特征在于,包括:向处于运行状态的目标程序内加载目标动态链接库,所述目标程序的代码为基于C或者C++语言编写的,所述目标动态链接库包括:至少一个更新函数,所述更新函数为用于更新所述目标程序内需要更新的原始函数的函数;确定所述更新函数对应的原始函数在所述目标程序内的第一函数地址;确定所述更新函数在所述目标动态链接库的第二函数地址;确定所述目标程序中用于调用所述原始函数的至少一个调用函数,将所述调用函数中所述原始函数的第一函数地址替换为所述原始函数对应的更新函数的第二函数地址,以完成所述目标程序的更新。2.根据权利要求1所述的方法,其特征在于,在所述向处于运行状态的目标程序内加载目标动态链接库之前,还包括:启动目标程序,通过目标程序的编译程序编译所述目标程序,所述编译程序中包括导出子函数;在通过所述编译程序编译所述目标程序的过程中,通过所述导出子函数将所述目标程序中的函数的函数名称和函数地址导出到所述目标程序的第一导出表空间,所述第一导出表空间内的数据可供所述目标程序之外的其他程序访问;所述确定所述更新函数对应的原始函数在所述目标程序内的第一函数地址,包括:基于所述更新函数的函数名称,从所述第一导出表空间查询所述更新函数对应的原始函数在所述目标程序中的第一函数地址。3.根据权利要求1或2所述的方法,其特征在于,所述目标动态链接库的第二导出表空间内存储有所述目标动态链接库内的函数的函数名称以及函数地址;其中,所述第二导出表空间内存储的函数名称和函数地址为编译所述目标动态链接库时,导入到所述第二导出表空间内的;所述第二导出表空间内的数据可供所述目标动态链接库之外的其他程序访问。4.根据权利要求1所述的方法,其特征在于,所述向处于运行状态的目标程序内加载目标动态链接库,包括:调用操作系统中的加载函数,通过所述加载函数向处于运行状态的所述目标程序内加载目标动态链接库。5.根据权利要求4所述的方法,其特征在于,所述目标动态链接库中还包括:用于实现程序热更新的更新执行程序的代码;所述方法还包括:执行所述更新执行程序的代码,以通过所述更新...

【专利技术属性】
技术研发人员:戴鑫孙雨侯健
申请(专利权)人:北京畅游创想软件技术有限公司
类型:发明
国别省市:

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

1