100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 应用程序的热更新方法及装置 存储介质及电子设备与流程

应用程序的热更新方法及装置 存储介质及电子设备与流程

时间:2022-09-01 15:29:30

相关推荐

应用程序的热更新方法及装置 存储介质及电子设备与流程

本发明涉及计算机

技术领域:

:,特别涉及一种应用程序的热更新方法及装置、存储介质及电子设备。

背景技术:

::随着互联网技术的发展,智能移动终端搭载着众多的应用程序(application,app),智能移动终端可由多种类的app实现强大的功能。伴随着人们的需求越来越多,开发人员需要不断的对应用程序进行维护和更新。开发人员在维护应用程序期间会根据应用程序的缺点研发对应的补丁或是脚本,并将补丁或是脚本添加至对应的安装包中,生成与应用程序对应的新的安装包,通过提示用户安装新的安装包对应用程序进行更新。经过发明人研究发现,应用程序中部分需要进行更新的程序代码通常以可执行与可链接格式(executablelinkableformat,elf)的文件存在,这类文件被称为elf文件。将elf文件在应用程序中进行更新时,需要下载包含elf文件的全量安装包对应用程序进行更新,并且在更新完成时需要中断应用程序为用户提供的服务,更新完成之后还需重新启动应用程序,导致用户使用应用程序的应用体验降低。技术实现要素:有鉴于此,本发明提供一种应用程序的热更新方法,可将与应用程序对应的elf文件在内存中进行加载,实现应用程序的热更新,更新完成后不重新启动应用程序,为用户提供更优质的服务,提高用户的使用体验。本发明还提供一种应用程序的热更新装置,用于支持所述应用程序的热更新方法在实际中的实现和应用。为实现上述目的,本发明提供如下技术方案:一种应用程序的热更新方法,包括:当检测到与当前应用程序对应的可执行与可链接格式elf文件时,获取所述elf文件中的各个可加载段;将每个所述可加载段映射至其对应的内存中;确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,以将所述代码更新至所述应用程序中;当每个所述可加载段中的代码均更新至所述当前应用程序中时,完成所述elf文件在内存中的加载,以实现所述应用程序的热更新。上述的方法,可选的,所述获取所述elf文件中的各个可加载段,包括:获取所述elf文件中的程序头表;读取所述程序头表中的各个程序头;确定每个所述程序头的属性参数是否表征可加载属性;若所述程序头的属性参数表征可加载属性,在所述elf文件中,获取与所述程序头对应的可加载段。上述的方法,可选的,所述将每个所述可加载段映射至其对应的内存中,包括:确定每个所述可加载段的段长度;依据每个所述可加载段的段长度,为所述可加载段分配与其对应的内存;获取每个所述可加载段的各个加载参数,并依据所述各个加载参数,将所述可加载段映射至其对应的内存中。上述的方法,可选的,还包括:判断所述elf文件是否已使用预设的加密算法进行加密;若判断所述elf文件已使用预设的加密算法进行加密,则确定与所述加密算法对应的解密算法;使用所述解密算法对所述elf文件进行解密,得到解密后的elf文件。上述的方法,可选的,所述确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,包括:获取所述可加载段的指针节区标识,依据所述指针节区标识在所述可加载段中确定对应的指针节区;获取所述可加载段中的加载器标识,并确定与所述加载器标识对应的加载器;调用所述指针节区中的函数指针,并所述函数指针在所述可加载段中对应的代码,使用所述加载器在所述内存中执行所述代码。上述的方法,可选的,所述在所述elf文件中,获取与所述程序头对应的可加载段,包括:获取所述程序头中的偏移参数以及长度参数;依据所述偏移参数在所述elf文件中确定偏移位置;从所述偏移位置开始,在所述elf文件中确定与所述长度参数所表征的数据长度相一致的数据段;将所述数据段确定为与所述程序头对应的可加载段。上述的方法,可选的,还包括:当所述elf文件在所述内存中加载完成时,清除所述内存中的可加载段以及所述代码的执行痕迹。一种应用程序的热更新装置,包括:获取单元,用于当检测到与当前应用程序对应的可执行与可链接格式elf文件时,获取所述elf文件中的各个可加载段;映射单元,用于将每个所述可加载段映射至其对应的内存中;第一确定单元,用于确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,以将所述代码更新至所述应用程序中;加载单元,用于当每个所述可加载段中的代码均更新至所述当前应用程序中时,完成所述elf文件在内存中的加载,以实现所述应用程序的热更新。上述的装置,所述获取单元,包括:第一获取子单元,用于获取所述elf文件中的程序头表;读取子单元,用于读取所述程序头表中的各个程序头;第一确定子单元,用于确定每个所述程序头的属性参数是否表征可加载属性;第二获取子单元,用于若所述程序头的属性参数表征可加载属性,在所述elf文件中,获取与所述程序头对应的可加载段。上述的装置,可选的,所述映射单元,包括:第二确定子单元,用于确定每个所述可加载段的段长度;分配子单元,用于依据每个所述可加载段的段长度,为所述可加载段分配与其对应的内存;映射子单元,用于获取每个所述可加载段的各个加载参数,并依据所述各个加载参数,将所述可加载段映射至其对应的内存中。上述的装置,可选的,还包括:判断单元,用于判断所述elf文件是否已使用预设的加密算法进行加密;第二确定单元,用于若判断所述elf文件已使用预设的加密算法进行加密,则确定与所述加密算法对应的解密算法;解密单元,用于使用所述解密算法对所述elf文件进行解密,得到解密后的elf文件。上述的装置,可选的,所述第一确定单元,包括:第三获取子单元,用于获取所述可加载段的指针节区标识,依据所述指针节区标识在所述可加载段中确定对应的指针节区;第四获取子单元,用于获取所述可加载段中的加载器标识,并确定与所述加载器标识对应的加载器;调用子单元,用于调用所述指针节区中的函数指针,并所述函数指针在所述可加载段中对应的代码,使用所述加载器在所述内存中执行所述代码。上述的装置,可选的,所述第二获取子单元,包括:获取模块,用于获取所述程序头中的偏移参数以及长度参数;第一确定模块,用于依据所述偏移参数在所述elf文件中确定偏移位置;第二确定模块,用于从所述偏移位置开始,在所述elf文件中确定与所述长度参数所表征的数据长度相一致的数据段;第三确定模块,用于将所述数据段确定为与所述程序头对应的可加载段。上述的装置,可选的,还包括:清除单元,用于当所述elf文件在所述内存中加载完成时,清除所述内存中的可加载段以及所述代码的执行痕迹。一种存储介质,所述存储介质包括存储的指令,其中,在所述指令运行时控制所述存储介质所在的设备执行上述的应用程序的热更新方法。一种电子设备,包括存储器,以及一个或者一个以上的指令,其中一个或者一个以上指令存储于存储器中,且经配置以由一个或者一个以上处理器执行上述的应用程序的热更新方法。与现有技术相比,本发明具有以下优点:本发明提供的方法中,当检测到与当前应用程序对应的elf文件时,获取所述elf文件中的各个可加载段;将每个所述可加载段映射至其对应的内存中;确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,以将所述代码更新至所述应用程序中;当每个所述可加载段中的代码均更新至所述当前应用程序中时,完成所述elf文件在内存中的加载,以实现所述应用程序的热更新。应用本发明提供的方法,通过在内存中加载elf文件,更新当前应用程序中的代码,完成应用程序的热更新;使用本方法,应用程序完成更新之后不需要中断进程,重新启动,为用户提供了更优质的服务,提高用户使用应用程序的体验。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为本发明实施例提供的一种应用程序的热更新方法的方法流程图;图2为本发明实施例提供的一种应用程序的热更新方法的另一方法流程图;图3为本发明实施例提供的一种应用程序的热更新方法的另一方法流程图;图4为本发明实施例提供的一种应用程序的热更新方法的另一方法流程图;图5为本发明实施例提供的一种应用程序的热更新装置的结构示意图;图6为本发明实施例提供的一种电子设备的结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本发明实施例提供的方法可应用于基于linux系统的移动终端、pc端以及ipad等各种类型的智能设备中,所述智能设备可搭载基于android系统开发的各种应用程序;本发明的执行主体可以为所述智能设备中的处理器或是服务器。本发明实施例提供的方法可将elf文件在内存中加载,实现应用程序的热更新,应用本发明提供的方法,完成应用程序的更新时,不需要使应用程序终止进程,重新启动,进而使应用程序为用户提供更优质的服务,提高用户使用应用程序的体验。本发明实施例提供的方法的具体流程可参照图1,对图1进行说明:s101、当检测到与当前应用程序对应的可执行与可链接格式elf文件时,获取所述elf文件中的各个可加载段。本发明实施例提供的方法中,应用程序在终端中运行时,实时检测终端的磁盘中是否存在与所述应用程序对应的可执行与可链接格式(executablelinkableformat,elf)文件,若检测到与所述应用程序对应的elf文件,则对所述elf文件进行解析,以获取所述elf文件中的各个可加载段;需要说明的是,检测到的elf文件为需要进行更新的elf文件。s102、将每个所述可加载段映射至其对应的内存中。本发明实施例提供的方法中,获取到所述elf文件中的各个可加载段之后,需要确定每个可加载段所对应的内存,并将所述可加载段映射至对应的内存中。可选的,所述内存可存储的字节大于或等于所述可加载段所包含的字节大小,为避免占用多余的内存,提高终端处理数据的速率,优选的,所述内存可存储的字节大小等于所述可加载段所包含的字节大小。s103、确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,以将所述代码更新至所述应用程序中。本发明实施例提供的方法中,将每个可加载段映射至内存中后,确定每个所述可加载段的指针节区,需要说明的是,所述指针节区中存有函数指针,所述指针节区中包括但不限于init和ini_array,所述ini_array为函数指针集合,所述ini_array包含多个函数指针。逐个调用所述指针节区中的各个函数指针,确定在所述可加载段中与函数指针对应的代码,并在内存中执行与调用的函数指针对应的代码,以将所述代码更新至所述应用程序中。s104、当每个所述可加载段中的代码均更新至所述当前应用程序中时,完成所述elf文件在内存中的加载,以实现所述应用程序的热更新。本发明实施例提供的方法中,判断是否elf文件中的每个可加载段中的代码均已更新至所述当前应用程序中,若判断所述elf文件中的每个可加载段中的代码均已更新至所述当前应用程序中,则所述elf文件在内存中完成加载,完成所述应用程序的热更新。本发明实施例提供的方法中,当检测到与当前应用程序对应的elf文件时,获取所述elf文件中的各个可加载段;将每个所述可加载段映射至其对应的内存中;确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,以将所述代码更新至所述应用程序中;当每个所述可加载段中的代码均更新至所述当前应用程序中时,完成所述elf文件在内存中的加载,以实现所述应用程序的热更新。应用本发明提供的方法,通过在内存中加载elf文件,更新当前应用程序中的代码,完成应用程序的热更新;使用本方法,应用程序完成更新之后不需要中断进程,重新启动,为用户提供了更优质的服务,提高用户使用应用程序的体验。本发明实施例提供的方法中,当检测到与当前应用程序对应的elf文件时,获取所述elf文件中的各个可加载段,获取可加载段的具体过程可参照图2,对图2进行如下说明:s201、获取所述elf文件中的程序头表。本发明实施例提供的方法中,对所述elf文件进行解析,以获得所述elf文件中的程序头表,所述程序头表中包含至少一个程序头;需要说明的是,所述elf文件中包括但不限于程序头表,所述elf文件中还包含elfheader和segment等内容;其中,elfheader表示elf文件头,segment表示段,所述elf文件头、程序头表以及段中保存的内容不同。s202、读取所述程序头表中的各个程序头。本发明实施例提供的方法中,依次读取所述程序头表中的各个程序头,以获取保存在所述程序头中的各个参数,每个参数表征不同的含义。需要说明的是,在elf文件中,每个程序头均有与其对应的segment,所述程序头中保存的参数可表示与其对应的segment中数据的属性以及结构等信息。s203、确定每个所述程序头的属性参数是否表征可加载属性。本发明实施例提供的方法中,确定每个所述程序头的属性参数是否表征为可加载属性,所述属性参数在参数表中具体可表示为p_type,判断p_type的属性是否为pt_load,若所述p_type的属性为pt_load,则所述程序头表中的属性参数表征为可加载属性。s204、若所述程序头的属性参数表征可加载属性,在所述elf文件中,获取与所述程序头对应的可加载段。本发明实施例提供的方法中,若所述程序头的属性参数表征为可加载属性,则在所述elf文件中,获取与所述程序头对应的可加载段。获取所述可加载段的具体过程如所述:获取所述程序头中的偏移参数以及长度参数;依据所述偏移参数在所述elf文件中确定偏移位置;从所述偏移位置开始,在所述elf文件中确定与所述长度参数所表征的数据长度相一致的数据段;将所述数据段确定为与所述程序头对应的可加载段。本发明实施例提供的方法中,在所述程序头中的各个参数中确定偏移参数以及长度参数,所述偏移参数表征在所述elf文件中的偏移量,所述偏移参数可以具体表示为p_offset;所述长度参数表征数据的长度,所述长度参数可以具体表示为p_filesz。依据所述偏移参数,在所述elf文件中确定偏移位置;从所述偏移位置开始,在所述elf文件中确定与所述长度参数表征的数据长度相同的数据段;需要说明的是,所述偏移位置为确定所述数据段的起始位置;将所述数据段确定为与所述程序头对应的可加载段。本发明实施例提供的方法中,通过应用本发明提供的方法,可精确的获取到elf文件中的各个可加载段,当获取到可加载段时,将所述可加载段映射至对应的内存中,以使可加载段中的数据在内存中应用,将所述可加载段映射至内存中的过程可参照图3,具体说明如下所述:s301、确定每个所述可加载段的段长度。本发明实施例提供的方法中,确定每个可加载段的段长度,所述段长度表征所述可加载段的数据长度;需要说明的是,确定所述可加载段的段长度的方式包括但不限于依据所述可加载段的段字节参数所表征的大小确定段长度;所述段字节参数可保存在所述可加载段的段参数表中。s302、依据每个所述可加载段的段长度,为所述可加载段分配与其对应的内存。本发明实施例提供的方法中,需要说明的是,为所述可加载段分配的内存的大小与所述可加载段的段长度相同;依据所述可加载段的段长度,分配与所述可加载段对应的内存,避免出现为可加载段分配的内存出现过大或过小的情况,合理利用内存,可提高内存处理数据的效率。s303、获取每个所述可加载段的各个加载参数,并依据所述各个加载参数,将所述可加载段映射至其对应的内存中。本发明实施例提供的方法中,获取每个所述可加载段的各个加载参数,所述加载参数可保存在所述可加载段的段参数表中,各个所述加载参数可表征所述可加载段中的数据结构;依据各个加载参数,将所述可加载段映射至其对应的内存中。本发明实施例提供的方法中,将可加载段映射至对应的内存中时,确定与所述可加载段对应的内存,通过为所述可加载段分配对应的内存,实现了内存的合理利用,提高内存工作的效率;依据可加载段的加载参数将可加载段映射至所述内存中,确保了映射至所述内存中的可加载段的数据结构不会出错,保证了映射至所述内存中的可加载段的数据结构的正确性。本发明实施例提供的方法中,为使elf文件在内存完成加载,需要在内存中执行所述可加载段中的代码,在内存中执行代码的过程如图4所示,具体说明如下所述:s401、获取所述可加载段的指针节区标识,依据所述指针节区标识在所述可加载段中确定对应的指针节区。本发明实施例提供的方法中,获取所述可加载段中的指针节区标识,并依据所述指针节区标识在所述可加载段中确定对应的指针节区,所述指针节区中包含函数指针;所述指针节区标识可保存在所述可加载段的段参数表中。需要说明的是,所述可加载段中包含多个节区,每个节区保存的内容不同。例如有的可加载段中存在动态链接节区,有的可加载段中不存在动态链接节区;若所述可加载段中存在动态链接节区,则确定所述动态链接节区中未定义的符号参数所对应的数据链接库,并与所述数据链接库建立链接,以便调用所述数据链接库中的数据;需要说明的是,每个不同的节区实现的功能不同。需要说明的是,每个可加载段中保存的节区个数以及各个节区类型等节区信息可能有所不同。s402、获取所述可加载段中的加载器标识,并确定与所述加载器标识对应的加载器。本发明实施例提供的方法中,所述加载器标识可保存在所述可加载段的段参数表中,确定与所述加载器标识对应的加载器。s403、调用所述指针节区中的函数指针,并所述函数指针在所述可加载段中对应的代码,使用所述加载器在所述内存中执行所述代码。本发明实施例提供的方法中,调用所述指针节区中的函数指针,并确定与所述函数指针在可加载段中对应的代码,使用所述加载器在所述内存中加载所述代码,以使所述代码在内存中执行;需要说明的是,所述函数指针在可加载段中指向对应的代码,所述代码保存在所述可加载段对应的节区中。需要说明的是,所述加载器加载所述代码时,即在内存中执行所述代码,以将所述代码更新至应用程序中。本发明实施例提供的方法中,调用指针节区中的函数指针,确定与所述函数指针对应的代码,应用确定的加载器加载所述代码,以使所述代码在内存中执行,以将所述代码更新至所述应用程序中;当每个所述可加载段中的代码均更新至所述当前应用程序中时,所述elf文件在内存中完成加载,完成所述应用程序的热更新。本发明实施例提供的方法中,为确保所述elf文件中数据的保密性,在将所述elf文件进行发布之前可将所述elf文件进行加密,以保证所述elf文件中的数据不被盗取,当所述elf文件在内存中加载完成时,清除所述内存中的可加载数据以及所述代码的执行痕迹,避免被动态dump,实现对代码细节的保护。本发明实施例提供的方法中,当检测到与当前应用程序对应的elf文件时,不确定所述elf文件是否为已加密的elf文件,可先判断所述elf文件是否已使用预设的加密算法进行加密;若判断所述elf文件已使用预设的加密算法进行加密,则确定与所述加密算法对应的解密算法;使用所述解密算法对所述elf文件进行解密,得到解密后的elf文件。需要说明的是,为确保所述elf文件中数据的保密性,可对elf文件进行加密后进行发布,若所述elf文件为经过加密的elf文件,则在获取elf文件时需要对其进行解密,以得到elf文件的明文数据。本发明提供一具体实例进行详细说明,具体说明如下所述:假设用户在终端中使用应用程序时,终端检测到与所述应用程序对应的elf文件时,则需要将所述elf文件中的数据代码更新至所述应用程序中。判断所述elf文件是否为已加密的elf文件,若所述efl文件为已加密的elf文件,则应用对应的解密算法对所述elf文件进行解密,以得到解密后的elf文件,将解密后的elf文件在内存中进行加载;若所述elf文件为不加密的elf文件,则直接将所述elf文件在内存中加载。需要说明的是,将elf文件在内存中加载的具体过程可以为:解析所述elf文件,以获取所述elf文件中的程序头表,读取所述程序头表中的各个程序头,确定每个所述程序头的属性参数是否表征为可加载属性,若所述属性参数表征为可加载属性,则依据所述程序头中的偏移参数和长度参数在elf文件中确定对应的可加载段,并依据所述可加载段的段长度为所述可加载段分配对应的内存,将所述可加载段映射至所述内存中。在映射至所述内存中的可加载段中确定指针节区,确定所述指针节区可依据指针节区标识进行确定;并依据加载器标识确定对应的加载器,当调用指针节区中的函数指针时,应用所述加载器在内存中加载与所述函数指针对应的代码,所述代码保存在所述可加载段中;当加载器在内存中加载所述代码时,所述代码在内存中执行,以将所述代码更新至所述应用程序中。当每个所述可加载段中的代码均更新至所述应用程序中时,完成所述elf文件在内存中的加载,实现所述应用程序的热更新,为确保elf文件中的数据的私密性,当所述elf文件在内存中完成加载时,清除所述内存中的可加载段和代码的执行痕迹,避免被动态内存dump,实现对代码细节的保护。应用本发明提供的方法,所述elf文件在内存中加载时,不需要停止处于运行状态的应用程序,避免了将elf文件中的代码数据更新至应用程序中后应用程序需要重新启动的情况,进而为用户提供了更优质的服务,提高了用户使用应用程序的使用体验。与图1对应的,本发明还提供了一种应用程序的热更新装置,用于支持所述应用程序的热更新方法在实际中的应用;所述应用程序的热更新装置可应用于各种计算机设备或是移动终端中。本发明实施例提供的应用程序的热更新装置的结构示意图可参照图5,具体说明如下所述:获取单元501,用于当检测到与当前应用程序对应的可执行与可链接格式elf文件时,获取所述elf文件中的各个可加载段;映射单元502,用于将每个所述可加载段映射至其对应的内存中;第一确定单元503,用于确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,以将所述代码更新至所述应用程序中;加载单元504,用于当每个所述可加载段中的代码均更新至所述当前应用程序中时,完成所述elf文件在内存中的加载,以实现所述应用程序的热更新。本发明实施例提供的装置中,当检测到与当前应用程序对应的elf文件时,获取所述elf文件中的各个可加载段;将每个所述可加载段映射至其对应的内存中;确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,以将所述代码更新至所述应用程序中;当每个所述可加载段中的代码均更新至所述当前应用程序中时,完成所述elf文件在内存中的加载,以实现所述应用程序的热更新。应用本发明提供的方法,通过在内存中加载elf文件,更新当前应用程序中的代码,完成应用程序的热更新;使用本发明提供的装置,应用程序完成更新之后不需要中断进程,重新启动,为用户提供了更优质的服务,提高用户使用应用程序的体验。本发明实施例提供的应用程序的热更新装置中,所述获取单元501可以设置为:第一获取子单元,用于获取所述elf文件中的程序头表;读取子单元,用于读取所述程序头表中的各个程序头;第一确定子单元,用于确定每个所述程序头的属性参数是否表征可加载属性;第二获取子单元,用于若所述程序头的属性参数表征可加载属性,在所述elf文件中,获取与所述程序头对应的可加载段。本发明实施例提供的应用程序的热更新装置中,所述映射单元502可以设置为:第二确定子单元,用于确定每个所述可加载段的段长度;分配子单元,用于依据每个所述可加载段的段长度,为所述可加载段分配与其对应的内存;映射子单元,用于获取每个所述可加载段的各个加载参数,并依据所述各个加载参数,将所述可加载段映射至其对应的内存中。本发明实施例提供的应用程序的热更新装置中,还可以设置为:判断单元,用于判断所述elf文件是否已使用预设的加密算法进行加密;第二确定单元,用于若判断所述elf文件已使用预设的加密算法进行加密,则确定与所述加密算法对应的解密算法;解密单元,用于使用所述解密算法对所述elf文件进行解密,得到解密后的elf文件。本发明实施例提供的应用程序的热更新装置中,所述第一确定单元503可以设置为:第三获取子单元,用于获取所述可加载段的指针节区标识,依据所述指针节区标识在所述可加载段中确定对应的指针节区;第四获取子单元,用于获取所述可加载段中的加载器标识,并确定与所述加载器标识对应的加载器;调用子单元,用于调用所述指针节区中的函数指针,并所述函数指针在所述可加载段中对应的代码,使用所述加载器在所述内存中执行所述代码。本发明实施例提供的应用程序的热更新装置中,所述第二获取子单元,可以设置为:获取模块,用于获取所述程序头中的偏移参数以及长度参数;第一确定模块,用于依据所述偏移参数在所述elf文件中确定偏移位置;第二确定模块,用于从所述偏移位置开始,在所述elf文件中确定与所述长度参数所表征的数据长度相一致的数据段;第三确定模块,用于将所述数据段确定为与所述程序头对应的可加载段。本发明实施例提供的应用程序的热更新装置中,还可以设置为:清除单元,用于当所述elf文件在所述内存中加载完成时,清除所述内存中的可加载段以及所述代码的执行痕迹。本发明还提供了一种存储介质,所述存储介质包括存储的指令,其中,在所述指令运行时控制所述存储介质所在的设备执行上述应用程序的热更新方法。本发明实施例还提供了一种电子设备,其结构示意图如图6所示,具体包括存储器601,以及一个或者一个以上的指令602,其中一个或者一个以上指令602存储于存储器601中,且经配置以由一个或者一个以上处理器603执行所述一个或者一个以上指令602进行以下操作:当检测到与当前应用程序对应的可执行与可链接格式elf文件时,获取所述elf文件中的各个可加载段;将每个所述可加载段映射至其对应的内存中;确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,以将所述代码更新至所述应用程序中;当每个所述可加载段中的代码均更新至所述当前应用程序中时,完成所述elf文件在内存中的加载,以实现所述应用程序的热更新。本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。当前第1页1 2 3 当前第1页1 2 3 

技术特征:

1.一种应用程序的热更新方法,其特征在于,包括:

当检测到与当前应用程序对应的可执行与可链接格式elf文件时,获取所述elf文件中的各个可加载段;

将每个所述可加载段映射至其对应的内存中;

确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,以将所述代码更新至所述应用程序中;

当每个所述可加载段中的代码均更新至所述当前应用程序中时,完成所述elf文件在内存中的加载,以实现所述应用程序的热更新。

2.根据权利要求1所述的方法,其特征在于,所述获取所述elf文件中的各个可加载段,包括:

获取所述elf文件中的程序头表;

读取所述程序头表中的各个程序头;

确定每个所述程序头的属性参数是否表征可加载属性;

若所述程序头的属性参数表征可加载属性,在所述elf文件中,获取与所述程序头对应的可加载段。

3.根据权利要求1所述的方法,其特征在于,所述将每个所述可加载段映射至其对应的内存中,包括:

确定每个所述可加载段的段长度;

依据每个所述可加载段的段长度,为所述可加载段分配与其对应的内存;

获取每个所述可加载段的各个加载参数,并依据所述各个加载参数,将所述可加载段映射至其对应的内存中。

4.根据权利要求1所述的方法,其特征在于,还包括:

判断所述elf文件是否已使用预设的加密算法进行加密;

若判断所述elf文件已使用预设的加密算法进行加密,则确定与所述加密算法对应的解密算法;

使用所述解密算法对所述elf文件进行解密,得到解密后的elf文件。

5.根据权利要求1所述的方法,其特征在于,所述确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,包括:

获取所述可加载段的指针节区标识,依据所述指针节区标识在所述可加载段中确定对应的指针节区;

获取所述可加载段中的加载器标识,并确定与所述加载器标识对应的加载器;

调用所述指针节区中的函数指针,并所述函数指针在所述可加载段中对应的代码,使用所述加载器在所述内存中执行所述代码。

6.根据权利要求2所述的方法,其特征在于,所述在所述elf文件中,获取与所述程序头对应的可加载段,包括:

获取所述程序头中的偏移参数以及长度参数;

依据所述偏移参数在所述elf文件中确定偏移位置;

从所述偏移位置开始,在所述elf文件中确定与所述长度参数所表征的数据长度相一致的数据段;

将所述数据段确定为与所述程序头对应的可加载段。

7.根据权利要求1所述的方法,其特征在于,还包括:

当所述elf文件在所述内存中加载完成时,清除所述内存中的可加载段以及所述代码的执行痕迹。

8.一种应用程序的热更新装置,其特征在于,包括:

获取单元,用于当检测到与当前应用程序对应的可执行与可链接格式elf文件时,获取所述elf文件中的各个可加载段;

映射单元,用于将每个所述可加载段映射至其对应的内存中;

第一确定单元,用于确定每个所述可加载段的指针节区,并调用所述指针节区中的函数指针,在所述内存中执行所述可加载段中与所述函数指针对应的代码,以将所述代码更新至所述应用程序中;

加载单元,用于当每个所述可加载段中的代码均更新至所述当前应用程序中时,完成所述elf文件在内存中的加载,以实现所述应用程序的热更新。

9.一种存储介质,其特征在于,所述存储介质包括存储的指令,其中,在所述指令运行时控制所述存储介质所在的设备执行如权利要求1~7任意一项所述的应用程序的热更新方法。

10.一种电子设备,其特征在于,包括存储器,以及一个或者一个以上的指令,其中一个或者一个以上指令存储于存储器中,且经配置以由一个或者一个以上处理器执行如权利要求1~7任意一项所述的应用程序的热更新方法。

技术总结

本发明提供一种应用程序的热更新方法及装置、存储介质及电子设备,包括:当检测到与当前应用程序对应的ELF文件时,获取ELF文件中的各个可加载段;将每个可加载段映射至其对应的内存中;确定每个可加载段的指针节区,并调用指针节区中的函数指针,在内存中执行可加载段中与函数指针对应的代码,以将代码更新至应用程序中;当每个可加载段中的代码均更新至当前应用程序中时,完成ELF文件在内存中的加载,以实现应用程序的热更新。应用本发明提供的方法,通过在内存中加载ELF文件,更新当前应用程序中的代码,完成应用程序的热更新,应用程序完成更新之后不需要中断进程,重新启动,为用户提供了更优质的服务,提高用户的使用体验。

技术研发人员:卢雄涛;王妍鹏

受保护的技术使用者:广州华多网络科技有限公司

技术研发日:.11.04

技术公布日:.02.25

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。