CN110275722B - 用于升级应用的方法、装置、设备和存储介质 - Google Patents

用于升级应用的方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN110275722B
CN110275722B CN201910544728.3A CN201910544728A CN110275722B CN 110275722 B CN110275722 B CN 110275722B CN 201910544728 A CN201910544728 A CN 201910544728A CN 110275722 B CN110275722 B CN 110275722B
Authority
CN
China
Prior art keywords
function
address
application
link library
dynamic link
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910544728.3A
Other languages
English (en)
Other versions
CN110275722A (zh
Inventor
袁林思
毛英明
王黎
张宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201910544728.3A priority Critical patent/CN110275722B/zh
Publication of CN110275722A publication Critical patent/CN110275722A/zh
Priority to US16/710,511 priority patent/US11281445B2/en
Priority to KR1020200003556A priority patent/KR102341388B1/ko
Priority to JP2020003207A priority patent/JP7090657B2/ja
Application granted granted Critical
Publication of CN110275722B publication Critical patent/CN110275722B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/328Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for runtime instruction patching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本公开内容涉及云计算领域,具体地,涉及用于升级应用的方法、装置、设备和存储介质。在该方法中,针对由第一应用的第一进程执行的第一线程,确定由第一线程调用的第一函数。确定第二应用中的与第一函数相对应的第二函数,第一应用将被升级至第二应用,以及第一函数将被升级至第二函数。基于包括第二函数的第二应用的第二动态链接库替换包括第一函数的第一应用的第一动态链接库。基于第二动态链接库更新第一进程,以使得更新的第一进程运行第二应用中的第二函数。采用上述实现方式,可以在无需重启第一应用的第一进程的情况下,通过更新第一进程,来以更为简单并且有效的方式执行应用的升级,进而降低应用升级所占用的时间并在尽量不中断第一应用的运行的情况下完成升级。

Description

用于升级应用的方法、装置、设备和存储介质
技术领域
本公开内容的实现方式概括地涉及应用的版本管理,并且更具体地,涉及用于管理应用版本升级的方法、装置、设备和计算机存储介质。
背景技术
随着软件开发技术的发展,目前已经出现了提供多种功能的应用。在应用的运行期间,出于修正错误、提供新功能或者其他目的,经常会针对应用的版本进行升级。此时,应用的版本升级将会中断应用的正常运行。对于例如网络服务器管理应用、虚拟机管理应用等随时面临大量用户访问的应用而言,中断应用的运行以执行版本升级将会严重影响用户的正常操作。此时,如何以更为有效的方式来管理应用的版本升级,成为一个技术难题。
发明内容
根据本公开内容的示例实现方式,提供了一种用于升级应用的方案。
在本公开内容的第一方面中,提供了一种用于升级应用的方法。在该方法中,针对由第一应用的第一进程执行的第一线程,确定由第一线程调用的第一函数。确定第二应用中的与第一函数相对应的第二函数,第一应用将被升级至第二应用,以及第一函数将被升级至第二函数。基于包括第二函数的第二应用的第二动态链接库替换包括第一函数的第一应用的第一动态链接库。基于第二动态链接库更新第一进程,以使得更新的第一进程运行第二应用中的第二函数。
在本公开内容的第二方面中,提供了一种用于升级应用的装置,包括:第一确定模块,配置用于针对由第一应用的第一进程执行的第一线程,确定由第一线程调用的第一函数;第二确定模块,配置用于确定第二应用中的与第一函数相对应的第二函数,第一应用将被升级至第二应用,以及第一函数将被升级至第二函数;替换模块,配置用于基于包括第二函数的第二应用的第二动态链接库替换包括第一函数的第一应用的第一动态链接库;以及更新模块,配置用于基于第二动态链接库更新第一进程,以使得更新的第一进程运行第二应用中的第二函数。
在本公开内容的第三方面中,提供了一种用于升级应用设备。该设备包括一个或多个处理器;以及存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现根据本公开内容的第一方面的方法。
在本公开内容的第四方面中,提供了一种其上存储有计算机程序的计算机可读介质,该程序在被处理器执行时实现根据本公开内容的第一方面的方法。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开内容的实现方式的关键或重要特征,亦非用于限制本公开内容的范围。本公开内容的其他特征将通过以下的描述变得容易理解。
附图说明
结合附图并参考以下详细说明,本公开内容的各实现方式的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:
图1示意性示出了其中可以实现根据本公开内容的示例性实现方式的应用环境的框图;
图2A示意性示出了根据本公开内容的示例性实现方式的执行升级前的第一应用的框图;
图2B示意性示出了根据本公开内容的示例性实现方式的执行升级后的第二应用的框图;
图3示意性示出了根据本公开内容的示例性实现方式的用于升级应用的方法的流程图;
图4示意性示出了根据本公开内容的示例性实现方式的与第一应用相关联的地址映射的框图;
图5示意性示出了根据本公开内容的示例性实现方式的与第一应用相关联的可执行文件的框图;
图6示意性示出了根据本公开内容的示例性实现方式的基于可执行文件中的多个节(section)中的数据来确定函数地址与函数名称之间的关联关系的框图;
图7示意性示出了根据本公开内容的示例性实现方式的基于注册文件来在第一应用和第二应用中的变量之间同步数据的框图;
图8示意性示出了根据本公开内容的示例性实现方式的用于升级应用的装置的框图;以及
图9示出了能够实施本公开内容的多个实现方式的计算设备的框图。
具体实施方式
下面将参照附图更详细地描述本公开内容的实现方式。虽然附图中显示了本公开内容的某些实现方式,然而应当理解的是,本公开内容可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实现方式,相反提供这些实现方式是为了更加透彻和完整地理解本公开内容。应当理解的是,本公开内容的附图及实现方式仅用于示例性作用,并非用于限制本公开内容的保护范围。
在本公开内容的实现方式的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实现方式”或“该实现方式”应当理解为“至少一个实现方式”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
在下文中,首先参见图1描述本公开内容的应用环境。图1示意性示出了其中可以实现根据本公开内容的示例性实现方式的应用环境100的框图。如图1所示,应用120可以运行在计算设备110上。在此的应用120可以是用于执行各种功能的应用程序。例如,该应用120可以是用于在虚拟化场景中提供网络虚拟化管理的管理应用,可以是用于管理Web服务器的服务器管理应用,或者还可以是用于监视计算设备110的运行状态的应用,等等。在应用120运行期间,应用120可以启动进程122,并且可以向进程122分配资源124。
概括而言,进程122是正在运行的应用120的实例,并且进程122可以具有自己的资源124(例如,文本区域、数据区域和堆栈,等)。在应用120的运行期间,进程122可以访问资源124中的各种内容,以便实现应用120的功能。将会理解,资源124是伴随进程122的运行而存在的,当进程122被终止时,则资源124将会被释放。
出于增加新功能、修复现有应用120中的错误、提高运行效率等方面原因,应用120经常会被升级。此时,如何尽量降低应用120的中断时间成为一个关键,尤其是对于需要24小时无中断运行的应用而言更是如此。为了便于描述,在本公开内容的上下文中将仅以网络虚拟化管理应用为示例来描述本公开内容的示例性实现方式。例如,openvswitch可以在虚拟化场景中提供网络虚拟化的支持。在实际部署时存在两种模式:在ovs-kernel中,处理由操作***完成;在ovs-dpdk模式中,处理由内核态切换至用户态处理。
对于网络虚拟化应用而言,目前已经提出了多种升级方案。在一个技术方案中,通过预部署新版本的组件,并重启ovs-vswitchd进程来实现升级。此方案可以应用于ovs-kernel和ovs-dpdk两种模式。然而,该升级方案将造成应用中断时间较长,断网时间可达分钟级别,此外升级操作结果不可预期。
在另一技术方案中,通过将ovs-vswitchd进程拆分为主守护进程与辅守护进程,主守护进程负责管理静态资源,辅守护进程负责数据数据处理。主守护进程与辅守护进程间共享存储资源。在升级时仅重启辅守护进程,由于启动过程不再需要申请内存,可缩短进程的重启时间,进而降低升级操作造成应用中断的时间。然而,此技术方案仅可应用于ovs-dpdk模式并且应用的中断时间仍然不够理想。
在又一技术方案中,在升级时启动新的ovs-vswitchd进程,新进程将与原进程占用相同数量的资源。尽管该技术方案可以进一步降低中断时间,然而由于该方案需要占用大量资源并且只可应用于ovs-dpdk方式,并不能提供通用的升级技术方案。
为了至少部分地解决上述技术方案中的不足,根据本公开内容的示例性实现,提供了一种用于在计算设备中升级应用的技术方案。在该技术方案中,并不重启应用的进程而是仅重启应用程序的线程。将会理解,线程是计算设备能够进行调度的最小单位。一个进程可以包括一个或多个线程,并且一个或多个线程可以共享该进程中的全部资源。仅仅重启线程并不会导致释放已经向进程分配的资源,因而避免了资源恢复过程产生的时间开销。进一步,可以替换应用的动态链接库以及调用动态链接库中的函数的地址,以此方式可以大大缩短升级过程导致的应用中断时间。在下文中,将分别参加图2A和图2B描述本公开内容的示例性实现方式的更多细节。
图2A示意性示出了根据本公开内容的示例性实现方式的执行升级前的第一应用的框图200A。第一应用210可以调用一个或多个动态链接库,尽管图2A中仅示意性示出了第一动态链接库216,该第一应用210还可以调用更多的动态链接库。进一步,尽管第一动态链接库216被示出为包括第一函数220,该第一动态链接库216还可以包括其他的一个或多个函数。在运行第一应用210时,第一应用210可以启动第一进程212。该第一进程212可以被分配第一资源214,并且该第一进程212可以执行一个或多个线程(例如,第一线程218,等等)。在此,第一线程218可以经由第一资源214中记录的第一函数220的地址,来调用第一函数220。
如图2A所示,在此的第一应用210可以是旧版本的应用,并且期望将该第一应用210升级至如图2B所示的新版本的第二应用230。图2B示意性示出了根据本公开内容的示例性实现方式的执行升级后的第二应用的框图200B。将会理解,第二应用230可以调用包括第二函数240的第二动态链接库236,在此的第二函数240是与第一函数220相对应的升级后的函数,而第二动态链接库236是与第一动态链接库216相对应的升级后的动态链接库。为了执行升级过程,并不需要重启第一进程212而是仅需要重启第一线程218,利用第二动态链接库236来替换第一动态链接库216,并且将第一资源214中的原本指向第一函数220的第一地址修改为指向第二函数240的第二地址。此时,重启后的第一线程238将调用新版本的第二函数240。进而,可以以更为简单并且有效的方式来实现升级过程。在下文中,将参见图3描述本公开内容的示例性实现的更多细节。
图3示意性示出了根据本公开内容的示例性实现方式的用于升级应用的方法300的流程图。如图3所示,在框310处,针对由第一应用210的第一进程212执行的第一线程218,确定由第一线程218调用的第一函数220。将会理解,尽管在框310处仅涉及针对第一函数220的处理,第一应用210的第一进程212还可以执行多个线程,并且多个线程中的每个线程可以调用一个或多个函数。此时,可以分别针对每个函数来执行方法300。
可以通过多种方式来确定第一函数220,例如,可以通过分析第一应用210的可执行文件以确定第一函数220,又例如,还可以通过分析第一应用210的源代码来确定第一函数220。在此第一函数220可以被存储在第一应用210的第一动态链接库216中。假设确定第一函数220的函数名称为“A”,则在后续操作中可以针对该函数“A”来进行处理。
在框320处,确定第二应用230中的与第一函数220相对应的第二函数240。在此的第一应用210是指旧版本的应用,而第二应用230是指新版本的应用,此时第一函数220将被升级至第二函数240。在第一函数220的函数名称为“A”的情况下,在此确定的第二函数240的函数名称例如可以是“A’”。在此新版本的函数A’可以被存储在第二应用230的第二动态链接库236中。
在框330处,可以基于包括第二函数240的第二应用230的第二动态链接库236替换包括第一函数220的第一应用210的第一动态链接库216。由于可以方便地获得第二应用230所调用的一个或多个动态链接库,通过利用新版本的动态链接库来逐一替换各个旧版本的动态链接库,可以以更为方便并且有效的方式来实现应用升级。
在框340处,基于第二动态链接库236来更新第一进程212,以使得更新的第一进程运行第二应用230中的第二函数240。具体地,更新可以包括两个方面:(1)更新第一资源214中的指向被调用函数的地址;(2)如果第一应用210涉及在编译阶段分配空间的变量,则还需要将这些变量的数值同步至第二应用230中的相应的变量。在下文中,将参见附图4首先描述如何更新地址映射。
图4示意性示出了根据本公开内容的示例性实现方式的与第一应用210相关联的地址映射410的框图400。在运行第一应用210期间,可以为第一应用210的第一进程212分配第一资源214,并且该第一资源214可以包括如图4所示的地址映射410。地址映射410可以包括由第一进程212执行的一个或多个线程所调用的函数的地址。如图4所示,地址映射410可以包括地址420。在执行升级前,地址420指向第一动态链接库216中的第一函数220。在执行升级之后,需要将地址420修改为指向第二动态链接库236中的第二函数240。
根据本公开内容的示例性实现方式,并不需要重启第一进程212,因而第一资源214在升级期间始终存在。可以首先从第一资源214中获取第一进程212的地址映射410,在此,地址映射410包括第一函数220在第一进程212的地址空间中的第一地址。将会理解,在此的地址空间是指可以由第一进程212访问的地址的范围。在运行第一应用210时,第一函数220被加载至该地址空间中,并且可以通过引用第一函数220在地址空间中的第一地址,来调用第一函数220。
为了更新地址映射410中的地址420,可以利用第二函数240的第二地址替换地址映射410中的第一函数220的第一地址。换言之,可以将地址420从指向第一函数220修改为指向第二函数240。继而,可以重启第一线程218,以使得重启的第一线程238基于更新的地址映射来调用第二动态链接库236中的第二函数240。此时,重启后的第一线程238可以基于更新后的地址420来调用第二函数240。将会理解,由于重启线程的各种开销远低于重启进程的开销,因而可以在较短的时间间隔内(例如,低于毫秒的数量级)完成线程重启。由于此时地址420中的指针已经被修改为指向第二函数240,重启后的第一线程238可以立即调用第二函数240并执行新版本的函数A’中定义的功能。
根据本公开内容的示例性实现方式,可以基于第一应用210的可执行文件来分别获取第一函数220的第一名称和第一地址。在下文中,将参见图5描述有关可执行文件的结构。具体地,图5示意性示出了根据本公开内容的示例性实现方式的与第一应用210相关联的可执行文件的框图500。图5左侧示出了可执行文件的结构的链接视图,该链接视图表示可执行文件在链接状态下的示意性数据结构。可执行文件例如可以以ELF(可执行并且可链接格式)进行存储。如图5所示,该链接视图可以包括ELF头部510、程序头部表(可选)512、多个节以及节头部表518。在图5中,多个节例如可以包括节1 514、……、节N 516等。具体地,在每个节可以存储与可执行文件的不同功能相对应的数据。
图5右侧示出了可执行文件的执行视图的数据结构,其表示在可执行文件被运行并且被加载到计算设备中执行时的数据结构。执行视图可以包括ELF头部520、程序头部表522、多个分段(例如,分段1 524、分段2 526等)、以及节头部表(可选)528。如图5所示,链接视图中的各个节可以对应于执行视图中的各个分段。根据本公开内容的示例性实现方式,可以通过查询链接视图中的各个节中的数据,来确定第一函数220的函数名称以及相应的第一地址。
根据本公开内容的示例性实现方式,在可执行文件的节“.rel.plt”中存储有重定位信息,并且可以使用如下文表1所示的数据结构来表示每个重定位项:
如表1所示,变量“r_offset”表示重定位项相对于基础地址的偏移量。变量“r_info”包括两部分:该重定位项在节“.dynsym”中的索引、以及该重定位项的类型。例如,可以通过使用宏ELF64_R_SYM来获取该重定位项在节“.dynsym”中的索引,并通过使用宏ELF64_R_TYPE来获取该重定位项的类型。进一步,可执行文件的节“.dynsym”可以包括保存所有定位或重定位项的定义和被引用时所需要的信息,一个重定位项可以对应于如下文表2示出的数据结构。
在表2中,“st_name”包括指向符号表字符串表(即,节“.dynstr”)的索引,通过该索引可以获得符号名,进而可以获得与偏移地址“offset”相对应的函数名称。将会理解,尽管在本公开的上下文中以64位操作***中的ELF64数据结构为示例描述了本公开的方法300的具体实现,该方法300还可以实现在例如32位***中,此时可以采用ELF32格式的数据结构来存储数据。在下文中,将参见图6描述函数的偏移地址和函数名称之间的关联关系。
图6示意性示出了根据本公开内容的示例性实现方式的基于可执行文件中的多个节中的数据来确定函数地址与函数名称之间的关联关系的框图600。如图6所示,可以从第一应用210的节610(即,节“.rel.plt”)中分别获取偏移地址612和有关重定位项的信息614。通过使用宏ELF64_R_SYM来获取该重定位项在节“.dynsym”中的索引620。继而,通过索引620即可获得与地址偏移612相对应的符号名定义622,进而可以找到相对应的符号表630并从中获取相应的符号名632。
根据本公开内容的示例性实现方式,可以遍历节“.rel.plt”中的所有重定位项,并按照上文参见图6描述的方式来确定与读取的各个重定位项相对应的ELF64_Rel数据结构。继而,可以利用宏ELF64_R_SYM来从ELF64_Rel中的“r_info”字段读取相应的索引,并使用该索引来在节“.dynsym”找到对应的符号信息,进而找到字段“st_name”所定义的字符串。
根据本公开内容的示例性实现方式,针对第一应用210的第一可执行文件中包括的一组地址中的给定地址,获取与给定地址相关联的函数名称;以及响应于确定函数名称与第一函数相匹配,将给定地址标识为第一地址。以此方式,可以可获得与一个重定位项对应的函数名称。具体地,假设一个重定位项的地址偏移为0x000…000,并且经由该重定位项找到的函数名称为“A”,则可以确定函数名称为“A”的第一函数220的第一地址为0x000…000。类似地,可以获得由第一线程调用的其他函数的名称和地址之间的关联关系。以此方式,可以确定第一应用210的第一可执行文件所调用的全部函数以及相对应的地址。
将会理解,在上文中已经描述了如何获得第一函数220的第一地址。类似地,可以首先将第二动态链接库236加载至地址空间之中,并且可以针对第二应用230的可执行文件来执行参见上文图6描述的过程,以便获得与第一函数220相对应的第二函数240的第二地址。以此方式,可以基于被加载的第二动态链接库236,获取第二函数240在地址空间中的第二地址。具体地,基于第二应用230的可执行文件,假设一个重定位项的地址偏移为0x010…000,并且经由该重定位项找到的函数名称为“A’”,则可以确定函数名称为“A’”的第二函数的第二地址为0x010…000。继而,可以利用第二地址0x010…000来替换地址映射410中的地址420中存储的第一地址。
在上文中已经描述了如何更新由第一线程218调用的第一函数220的地址以便实现版本升级的目的。在第一应用210的一个或多个动态链接库中,还可能存在内部函数。在此的内部函数是指并没有被第一应用210直接调用的函数。内部函数可以被第一应用210间接调用,因而还需要针对这些内部函数进行升级。根据本公开内容的示例性实现方式,可以遍历第一动态链接库216中的多个函数,以便针对每个内部函数执行类似于方法300的处理。
根据本公开内容的示例性实现方式,可以从第一动态链接库216中获取第一函数220以外的第三函数(例如,函数名称为“B”)。继而,可以获取第三函数在地址空间中的第三地址。类似地,可以获取第二动态链接库236中的与第三函数“B”相对应的第四函数(例如,函数“B’”)在地址空间中的第四地址。可以利用第四地址更新地址映射中的第三地址。此时,重启后的第一线程238将基于第四地址来调用新版本的函数B’,进而实现升级的目的。
假设旧版本的第一应用210直接调用第一函数A,并且该第一函数A调用第三函数B。新版本的第二应用230直接调用第二函数A’,并且该第二函数A’调用第三函数B’。按照上文描述的方法,可以利用第二动态链接库236来替换第一动态链接库216。进一步,在地址映射410中,可以利用第二函数A’的第二地址来替换第一函数A的第一地址,利用第四函数B’的第四地址来替换第三函数B的第三地址。此时,重启后的第一线程238将会调用新版本的函数A’,并且该新版本的函数A’将会调用新版本的函数B’。
将会理解,在上文中仅以第一函数220作为由第一应用210直接调用的函数的示例、并且以第三函数作为由第一应用210间接调用的函数的示例,来描述了如何针对第一应用210中的各个函数执行升级的具体操作。该第一应用210还可以包括更多的直接和间接调用的函数,此时可以分别遍历第一应用210的可执行文件的节“.rel.plt”以及第一应用210的各个动态链接库的节“.rel.plt”中的重定位项,以便找到升级过程中所涉及的各个函数的函数名称相对应的地址信息。通过替换动态链接库以及更新地址映射410中的地址信息,即可使得重启后的第一线程238调用新版本的各个函数。
在上文中已经描述了如何基于更新动态链接库和地址映射来使得重启后的第一线程238执行第二应用230中的第二函数240的具体实现方式。将会理解,在第一动态链接库中还可能会存在例如全局变量和静态变量。这些变量的存储空间是在编译期间分配的,并且这些变量的数值在第一应用210的运行期间将会被修改。因而还需要保存这些被修改的变量,并且需要将修改后变量的数值同步至第二动态链接库236中的相应变量。以此方式,才能确保重启后的第一线程238中的各个全局变量和静态变量的数值与重启之前的数值相一致。
根据本公开内容的示例性实现方式,基于第二动态链接库236更新第一进程212还可以包括处理变量的过程。具体地,可以确定与第一动态链接库216相关联的第一变量,在此的第一变量的地址是在编译第一应用期间分配的。在下文中,将参见图7描述与同步变量相关联的过程的更多细节。图7示意性示出了根据本公开内容的示例性实现方式的基于注册文件来在第一应用210和第二应用230中的变量之间执行同步的框图700。如图7所示,在第一动态链接库216的源代码710中的代码行712定义了静态变量xyz。此时,用于该静态变量xyz的存储空间将在编译阶段分配。该静态变量xyz充当计数器的功能,并且在函数goo()每次被调用时,可以执行累加操作。
将会理解,在第一应用210运行期间,函数goo()可能会被调用多次,因而使得在执行更新操作时该静态变量xyz的数值已经被修改(例如,xyz=100)。为了确保将xyz=100的数值同步至第二应用230中,可以确定第二应用230中的与第一变量相对应的第二变量,并且基于第一变量的数值设置第二变量。利用本公开内容的示例性实现方式,可以确保将第一应用210中的各个变量的数值同步至第二应用230中的相应变量。
具体地,为了便于在第一应用210和第二应用230之间同步变量,可以向第一动态链接库216添加第一注册文件720,并且向第二动态链接库236添加第二注册文件722。在此,第一注册文件210中包括第一变量的数值在第一线程218的运行期间被动态地更新。在上文中xyz=100的情况下,第一注册文件720中可以包括“xyz=100”的信息。继而,可以基于第一变量的数值更新第二变量的数值,此时第二注册文件722也可以包括“xyz=100”的信息。
根据本公开内容的示例性实现方式,重启的第一线程238可以从第二注册文件722中读取第二变量,以便达到变量同步的目的。此时,重启的第一线程238将首先从第二注册文件722中读取“xyz=100”,并且将第二动态链接库236中定义的相应静态变量xyz的数值设置为100。以此方式,第二应用230可以恢复到第一线程被重启之前的状态。
将会理解,尽管在上文中仅以静态变量xyz作为需要同步的变量的示例来描述了变量同步过程。根据本公开内容的示例性实现方式,第一动态链接库216中可以包括一个或多个全局变量和/或静态变量。可以按照类似的方式来逐一针对每个变量进行操作。例如,可以向第一注册文件720和第二注册文件722中***与每个待同步变量相对应的条目,以便实现同步操作。利用本公开内容的示例性实现方式,通过第一注册文件720和第二注册文件722,可以以简单并且有效的方式来将旧版本的第一应用210中的各个静态变量/全局变量的数值拷贝至新版本的第二应用230中的各个相对应的静态变量/全局变量。
在上文中已经描述了用于执行升级的具体实现方式。在已经完成升级操作之后,还可以清除先前步骤中加载到计算设备的存储器中的不再使用的数据。根据本公开内容的示例性实现方式,响应于确定第一线程已经被重启,从运行第一应用210的计算设备的存储器中清除第一可执行文件中的为确定第一地址而被加载到存储器中的部分。
例如,为了确定函数名称与函数地址之间的关联关系,可以向计算设备的存储器中加载如图6所示的各个数据结构。在已经确定关联关系之后,已经利用新版本函数的地址替换了地址映射中的旧版本函数的地址,并且重启后的第一线程238已经基于更新后的地址映射来调用了新版本函数。此时,计算设备的存储器中被加载的有关第一动态链接库236中的各个节的信息不再会被使用,因而可以释放这些信息所在的存储空间。
根据本公开内容的示例性实现方式,由于采用利用新版本的动态链接库来替换旧版本的动态链接库的方式实现热升级,因而要求第一应用和第二应用分别是经由动态编译方式生成的。进一步,可以在动态链接库中实现应用的核心业务逻辑,并且在应用的主程序中可以包括用于调用动态链接库中的函数的接口函数。此时,第一动态链接库216和第二动态链接库236分别包括第一应用210和第二应用230的核心业务逻辑,进而通过替换动态链接库的方式,即可实现应用升级的目的。
在上文中已经描述了从第一应用210升级至第二应用230的具体过程,根据本公开的示例性实现方式,该第二应用230还可以被升级至更新版本的第三应用。此时,可以按照上文描述的方法执行升级步骤,并且利用第三应用的第三动态链接库来替换第二动态链接库,利用第三应用中的各个函数的地址来更新第二应用中的相应函数的地址。
在上文中已经详细描述了如何执行应用升级的方法300的多个实现方式。根据本公开内容的示例性实现方式,还提供了用于执行应用升级的装置。在下文中,将参见图8详细描述。图8示意性示出了根据本公开内容的示例性实现方式的用于升级应用的装置800的框图。如图8所示,该装置800包括:第一确定模块810,配置用于针对由第一应用的第一进程执行的第一线程,确定由第一线程调用的第一函数;第二确定模块820,配置用于确定第二应用中的与第一函数相对应的第二函数,第一应用将被升级至第二应用,以及第一函数将被升级至第二函数;替换模块830,配置用于基于包括第二函数的第二应用的第二动态链接库替换包括第一函数的第一应用的第一动态链接库;以及更新模块840,配置用于基于第二动态链接库更新第一进程,以使得更新的第一进程运行第二应用中的第二函数。
根据本公开内容的示例性实现方式,更新模块840包括:地址映射获取模块,配置用于获取第一进程的地址映射,地址映射包括第一函数在第一进程的地址空间中的第一地址;地址更新模块,配置用于利用第二函数在地址空间中的第二地址更新地址映射中的第一函数的第一地址;以及重启模块,配置用于重启第一线程,以使得重启的第一线程基于更新的地址映射调用第二动态链接库中的第二函数。
根据本公开内容的示例性实现方式,进一步包括:地址获取模块,配置用于获取第一函数在地址空间中的第一地址。
根据本公开内容的示例性实现方式,地址获取模块进一步包括:函数名称获取模块,配置用于针对第一应用的第一可执行文件中包括的一组地址中的给定地址,获取与给定地址相关联的函数名称;以及标识模块,配置用于响应于确定函数名称与第一函数相匹配,将给定地址标识为第一地址。
根据本公开内容的示例性实现方式,进一步包括:清除模块,配置用于响应于确定第一线程已经被重启,从运行第一应用的计算设备的存储器中清除第一可执行文件中的为确定第一地址而被加载到存储器中的部分。
根据本公开内容的示例性实现方式,地址更新模块进一步包括:加载模块,配置用于将第二动态链接库加载至地址空间之中;地址获取模块,配置用于基于被加载的第二动态链接库,获取第二函数在地址空间中的第二地址。
根据本公开内容的示例性实现方式,进一步包括:第一链接库处理模块,配置用于针对第一动态链接库中的第一函数以外的第三函数,获取第三函数在地址空间中的第三地址;第二链接库处理模块,配置用于获取第二动态链接库中的与第三函数相对应的第四函数在地址空间中的第四地址。
根据本公开内容的示例性实现方式,更新模块840进一步配置用于利用第四地址更新地址映射中的第三地址。
根据本公开内容的示例性实现方式,更新模块840进一步包括:第一变量确定模块,配置用于确定与第一动态链接库相关联的第一变量,第一变量的地址是在编译第一应用期间分配的;第二变量确定模块,配置用于确定第二应用中的与第一变量相对应的第二变量;以及变量设置模块,配置用于基于第一变量的数值设置第二变量。
根据本公开内容的示例性实现方式,变量设置模块包括:注册模块,配置用于分别向第一动态链接库和第二动态链接库添加第一注册文件和第二注册文件,第一注册文件中包括的第一变量的数值在第一线程的运行期间被动态地更新;同步模块,配置用于基于第一注册文件同步第二注册文件;以及变量更新模块,配置用于基于第二注册文件更新第二变量的数值。
根据本公开内容的示例性实现方式,变量更新模块包括:读取模块,配置用于使得重启的第一线程从第二注册文件中读取第二变量的数值。
根据本公开内容的示例性实现方式,第一应用和第二应用分别是经由动态编译方式生成的。
根据本公开内容的示例性实现方式,第一动态链接库和第二动态链接库分别包括第一应用和第二应用的核心业务逻辑。
图9示出了能够实施本公开内容的多个实现方式的计算设备900的框图。设备900可以用于实现图3描述的方法。如图所示,设备900包括中央处理单元(CPU)901,其可以根据存储在只读存储器(ROM)902中的计算机程序指令或者从存储单元908加载到随机访问存储器(RAM)903中的计算机程序指令,来执行各种适当的动作和处理。在RAM 903中,还可存储设备900操作所需的各种程序和数据。CPU 901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
设备900中的多个部件连接至I/O接口905,包括:输入单元906,例如键盘、鼠标等;输出单元907,例如各种类型的显示器、扬声器等;存储单元908,例如磁盘、光盘等;以及通信单元909,例如网卡、调制解调器、无线通信收发机等。通信单元909允许设备900通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理单元901执行上文所描述的各个方法和处理,例如方法300。例如,在一些实现方式中,方法300可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元909。在一些实现方式中,计算机程序的部分或者全部可以经由ROM 902和/或通信单元909而被载入和/或安装到设备900上。当计算机程序加载到RAM 903并由CPU 901执行时,可以执行上文描述的方法300的一个或多个步骤。备选地,在其他实现方式中,CPU 901可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行方法300。
根据本公开内容的示例性实现方式,提供了一种其上存储有计算机程序的计算机可读存储介质。程序被处理器执行时实现本公开内容所描述的方法。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上***的***(SOC)、负载可编程逻辑设备(CPLD)等等。
用于实施本公开内容的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开内容的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开内容的范围的限制。在单独的实现方式的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。

Claims (20)

1.一种用于升级应用的方法,包括:
针对由第一应用的第一进程执行的第一线程,确定由所述第一线程调用的第一函数;
确定第二应用中的与所述第一函数相对应的第二函数,所述第一应用将被升级至所述第二应用,以及所述第一函数将被升级至所述第二函数;
基于包括所述第二函数的所述第二应用的第二动态链接库替换包括所述第一函数的所述第一应用的第一动态链接库;以及
基于所述第二动态链接库更新所述第一进程,以使得更新的所述第一进程运行所述第二应用中的第二函数;
其中基于所述第二动态链接库更新所述第一进程包括:
获取所述第一进程的地址映射,所述地址映射包括所述第一函数在所述第一进程的地址空间中的第一地址;
利用所述第二函数在所述地址空间中的第二地址更新所述地址映射中的所述第一函数的第一地址;以及
重启所述第一线程,以使得重启的第一线程基于更新的所述地址映射调用所述第二动态链接库中的所述第二函数的第二地址,从而调用所述第二动态链接库中的所述第二函数。
2.根据权利要求1所述的方法,进一步包括获取所述第一函数在所述地址空间中的所述第一地址,包括:针对所述第一应用的第一可执行文件中包括的一组地址中的给定地址,
获取与所述给定地址相关联的函数名称;以及
响应于确定所述函数名称与所述第一函数相匹配,将所述给定地址标识为所述第一地址。
3.根据权利要求2所述的方法,进一步包括:
响应于确定所述第一线程已经被重启,从运行所述第一应用的计算设备的存储器中清除所述第一可执行文件中的为确定所述第一地址而被加载到所述存储器中的部分。
4.根据权利要求1所述的方法,进一步包括:
将所述第二动态链接库加载至所述地址空间之中;以及
基于被加载的所述第二动态链接库,获取所述第二函数在所述地址空间中的所述第二地址。
5.根据权利要求1所述的方法,进一步包括:针对所述第一动态链接库中的所述第一函数以外的第三函数,
获取所述第三函数在所述地址空间中的第三地址;
获取所述第二动态链接库中的与所述第三函数相对应的第四函数在所述地址空间中的第四地址;以及
利用所述第四地址更新所述地址映射中的所述第三地址。
6.根据权利要求1所述的方法,其中基于所述第二动态链接库更新所述第一进程包括:
确定与所述第一动态链接库相关联的第一变量,所述第一变量的地址是在编译所述第一应用期间分配的;
确定所述第二应用中的与所述第一变量相对应的第二变量;以及
基于所述第一变量的数值设置所述第二变量。
7.根据权利要求6所述的方法,其中基于所述第一变量的数值设置所述第二变量包括:
分别向所述第一动态链接库和所述第二动态链接库添加第一注册文件和第二注册文件,所述第一注册文件中包括的所述第一变量的数值在所述第一线程的运行期间被动态地更新;
基于所述第一注册文件同步所述第二注册文件;以及
基于所述第二注册文件更新所述第二变量的数值。
8.根据权利要求7所述的方法,其中基于所述第二注册文件更新所述第二变量的数值包括:
使得重启的第一线程从所述第二注册文件中读取所述第二变量的数值。
9.根据权利要求1所述的方法,其中:
所述第一应用和所述第二应用分别是经由动态编译方式生成的;以及
所述第一动态链接库和所述第二动态链接库分别包括第一应用和所述第二应用的核心业务逻辑。
10.一种用于升级应用的装置,包括:
第一确定模块,配置用于针对由第一应用的第一进程执行的第一线程,确定由所述第一线程调用的第一函数;
第二确定模块,配置用于确定第二应用中的与所述第一函数相对应的第二函数,所述第一应用将被升级至所述第二应用,以及所述第一函数将被升级至所述第二函数;
替换模块,配置用于基于包括所述第二函数的所述第二应用的第二动态链接库替换包括所述第一函数的所述第一应用的第一动态链接库;以及
更新模块,配置用于基于所述第二动态链接库更新所述第一进程,以使得更新的所述第一进程运行所述第二应用中的第二函数;
其中所述更新模块包括:
地址映射获取模块,配置用于获取所述第一进程的地址映射,所述地址映射包括所述第一函数在所述第一进程的地址空间中的第一地址;
地址更新模块,配置用于利用所述第二函数在所述地址空间中的第二地址更新所述地址映射中的所述第一函数的第一地址;以及
重启模块,配置用于重启所述第一线程,以使得重启的第一线程基于更新的所述地址映射调用所述第二动态链接库中的所述第二函数的第二地址,从而调用所述第二动态链接库中的所述第二函数。
11.根据权利要求10所述的装置,进一步包括地址获取模块,配置用于获取所述第一函数在所述地址空间中的所述第一地址,所述地址获取模块进一步包括:
函数名称获取模块,配置用于针对所述第一应用的第一可执行文件中包括的一组地址中的给定地址,获取与所述给定地址相关联的函数名称;以及
标识模块,配置用于响应于确定所述函数名称与所述第一函数相匹配,将所述给定地址标识为所述第一地址。
12.根据权利要求11所述的装置,进一步包括:
清除模块,配置用于响应于确定所述第一线程已经被重启,从运行所述第一应用的计算设备的存储器中清除所述第一可执行文件中的为确定所述第一地址而被加载到所述存储器中的部分。
13.根据权利要求10所述的装置,其中所述地址更新模块进一步包括:
加载模块,配置用于将所述第二动态链接库加载至所述地址空间之中;
地址获取模块,配置用于基于被加载的所述第二动态链接库,获取所述第二函数在所述地址空间中的所述第二地址。
14.根据权利要求10所述的装置,进一步包括:
第一链接库处理模块,配置用于针对所述第一动态链接库中的所述第一函数以外的第三函数,获取所述第三函数在所述地址空间中的第三地址;
第二链接库处理模块,配置用于获取所述第二动态链接库中的与所述第三函数相对应的第四函数在所述地址空间中的第四地址;以及
所述更新模块进一步配置用于利用所述第四地址更新所述地址映射中的所述第三地址。
15.根据权利要求10所述的装置,其中所述更新模块进一步包括:
第一变量确定模块,配置用于确定与所述第一动态链接库相关联的第一变量,所述第一变量的地址是在编译所述第一应用期间分配的;
第二变量确定模块,配置用于确定所述第二应用中的与所述第一变量相对应的第二变量;以及
变量设置模块,配置用于基于所述第一变量的数值设置所述第二变量。
16.根据权利要求15所述的装置,其中所述变量设置模块包括:
注册模块,配置用于分别向所述第一动态链接库和所述第二动态链接库添加第一注册文件和第二注册文件,所述第一注册文件中包括的所述第一变量的数值在所述第一线程的运行期间被动态地更新;
同步模块,配置用于基于所述第一注册文件同步所述第二注册文件;以及
变量更新模块,配置用于基于所述第二注册文件更新所述第二变量的数值。
17.根据权利要求16所述的装置,其中所述变量更新模块包括:
读取模块,配置用于使得重启的第一线程从所述第二注册文件中读取所述第二变量的数值。
18.根据权利要求10所述的装置,其中:
所述第一应用和所述第二应用分别是经由动态编译方式生成的;以及
所述第一动态链接库和所述第二动态链接库分别包括第一应用和所述第二应用的核心业务逻辑。
19.一种用于升级应用的设备,所述设备包括:
一个或多个处理器;以及
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现根据权利要求1-9中任一项所述的方法。
20.一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现根据权利要求1-9中任一项所述的方法。
CN201910544728.3A 2019-06-21 2019-06-21 用于升级应用的方法、装置、设备和存储介质 Active CN110275722B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201910544728.3A CN110275722B (zh) 2019-06-21 2019-06-21 用于升级应用的方法、装置、设备和存储介质
US16/710,511 US11281445B2 (en) 2019-06-21 2019-12-11 Method, apparatus, device and storage medium for upgrading application
KR1020200003556A KR102341388B1 (ko) 2019-06-21 2020-01-10 애플리케이션 업그레이드 방법, 장치, 기기 및 저장 매체
JP2020003207A JP7090657B2 (ja) 2019-06-21 2020-01-10 アプリケーションをアップグレードするための方法、装置、デバイスならびに記憶媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910544728.3A CN110275722B (zh) 2019-06-21 2019-06-21 用于升级应用的方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN110275722A CN110275722A (zh) 2019-09-24
CN110275722B true CN110275722B (zh) 2023-08-08

Family

ID=67961594

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910544728.3A Active CN110275722B (zh) 2019-06-21 2019-06-21 用于升级应用的方法、装置、设备和存储介质

Country Status (4)

Country Link
US (1) US11281445B2 (zh)
JP (1) JP7090657B2 (zh)
KR (1) KR102341388B1 (zh)
CN (1) CN110275722B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112199110B (zh) * 2020-10-16 2022-05-31 上海睿成软件有限公司 一种免重启运维升级方法、***、装置和介质
CN112685063B (zh) * 2020-12-30 2023-11-28 北京天融信网络安全技术有限公司 特征库更新方法、装置、网络设备及可读存储介质
CN112667272A (zh) * 2020-12-31 2021-04-16 威胜集团有限公司 电表升级方法、***、智能电表及存储介质
CN112650520B (zh) * 2020-12-31 2023-08-01 威胜集团有限公司 电表升级方法、***、智能电表及存储介质
CN112988570B (zh) * 2021-02-08 2023-03-10 芯华章科技股份有限公司 一种调试程序的方法、电子设备及存储介质
CN113296786B (zh) * 2021-05-31 2024-05-14 上海米哈游璃月科技有限公司 数据处理方法、装置、电子设备及存储介质
CN113660123B (zh) * 2021-08-16 2024-02-13 杭州网易数之帆科技有限公司 虚拟交换机升级方法、装置、电子设备以及存储介质
CN114020618B (zh) * 2021-10-30 2023-10-03 江苏信而泰智能装备有限公司 一种基于fpga和dpdk的高可用测试方法及***
CN114296754A (zh) * 2021-11-30 2022-04-08 深圳市广和通无线股份有限公司 芯片平台升级方法及相关装置
CN114237676B (zh) * 2021-12-28 2023-12-08 湖南云箭智能科技有限公司 一种fpga逻辑更新方法、装置、设备及可读存储介质
CN115640037B (zh) * 2022-09-09 2023-08-11 北京畅游创想软件技术有限公司 程序更新方法和装置
CN117806686A (zh) * 2022-09-26 2024-04-02 华为技术有限公司 应用程序的更新方法、装置、设备及计算机可读存储介质
CN115408031B (zh) * 2022-09-29 2023-09-05 北京亚控科技发展有限公司 应用的更新方法及相关设备
CN116400945B (zh) * 2023-06-08 2023-10-27 中航信移动科技有限公司 一种动态链接库升级方法、电子设备及存储介质

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101964725A (zh) * 2010-09-01 2011-02-02 中兴通讯股份有限公司 业务不中断升级的方法和***
CN105630557A (zh) * 2015-12-24 2016-06-01 迈普通信技术股份有限公司 热补丁方法和装置
CN105955762A (zh) * 2016-04-19 2016-09-21 北京金山安全软件有限公司 一种注入动态链接库文件的方法、装置及电子设备
CN106371940A (zh) * 2015-07-21 2017-02-01 腾讯科技(深圳)有限公司 一种程序崩溃解决方法及装置
CN107158705A (zh) * 2017-05-18 2017-09-15 腾讯科技(深圳)有限公司 服务的更新方法和装置
CN107870777A (zh) * 2016-09-23 2018-04-03 中兴通讯股份有限公司 一种热补丁实现方法及装置、终端
CN108268266A (zh) * 2016-12-29 2018-07-10 中移(苏州)软件技术有限公司 一种升级方法和装置
CN108427571A (zh) * 2018-02-07 2018-08-21 深圳市雁联计算***有限公司 一种动态链接库更新方法及服务器
CN108845813A (zh) * 2018-06-14 2018-11-20 郑州云海信息技术有限公司 一种应用程序热更新方法
CN109857432A (zh) * 2019-01-14 2019-06-07 珠海金山网络游戏科技有限公司 一种游戏应用的热更新方法和装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5341968B2 (zh) 1973-07-24 1978-11-08
JPH05341968A (ja) * 1992-06-05 1993-12-24 Nec Corp ライブラリ更新方式
JPH06110678A (ja) 1992-09-30 1994-04-22 Toshiba Corp プログラム実行方式及び実行プログラムの動的変更方法
US7784044B2 (en) * 2002-12-02 2010-08-24 Microsoft Corporation Patching of in-use functions on a running computer system
GB0504570D0 (en) 2005-03-04 2005-04-13 Falanx Microsystems As Method of and apparatus for encoding data
JP2006268172A (ja) 2005-03-22 2006-10-05 Nec Corp サーバシステムおよびオンラインソフトウェア更新方法
JP5906609B2 (ja) 2011-08-19 2016-04-20 富士通株式会社 デバッグ支援プログラム、デバッグ支援方法及びデバッグ支援システム
ES2439804B1 (es) * 2012-04-19 2014-10-29 Universitat Politècnica De Catalunya Procedimiento, sistema y pieza de código ejecutable para virtualizar un recurso de hardware asociado a un sistema informático
US9087191B2 (en) * 2012-08-24 2015-07-21 Vmware, Inc. Method and system for facilitating isolated workspace for applications
JP2015041273A (ja) 2013-08-22 2015-03-02 沖電気工業株式会社 プログラム更新システム、プログラム更新方法及びプログラム更新プログラム、並びに、通信装置
CA3027728A1 (en) 2016-06-16 2017-12-21 Virsec Systems, Inc. Systems and methods for remediating memory corruption in a computer application
WO2018159691A1 (ja) 2017-02-28 2018-09-07 日本電信電話株式会社 通信処理装置、情報処理装置、及び、通信処理装置の制御方法
CN107357586B (zh) * 2017-07-14 2018-06-05 腾讯科技(深圳)有限公司 应用程序的控制方法、装置及设备

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101964725A (zh) * 2010-09-01 2011-02-02 中兴通讯股份有限公司 业务不中断升级的方法和***
CN106371940A (zh) * 2015-07-21 2017-02-01 腾讯科技(深圳)有限公司 一种程序崩溃解决方法及装置
CN105630557A (zh) * 2015-12-24 2016-06-01 迈普通信技术股份有限公司 热补丁方法和装置
CN105955762A (zh) * 2016-04-19 2016-09-21 北京金山安全软件有限公司 一种注入动态链接库文件的方法、装置及电子设备
CN107870777A (zh) * 2016-09-23 2018-04-03 中兴通讯股份有限公司 一种热补丁实现方法及装置、终端
CN108268266A (zh) * 2016-12-29 2018-07-10 中移(苏州)软件技术有限公司 一种升级方法和装置
CN107158705A (zh) * 2017-05-18 2017-09-15 腾讯科技(深圳)有限公司 服务的更新方法和装置
CN108427571A (zh) * 2018-02-07 2018-08-21 深圳市雁联计算***有限公司 一种动态链接库更新方法及服务器
CN108845813A (zh) * 2018-06-14 2018-11-20 郑州云海信息技术有限公司 一种应用程序热更新方法
CN109857432A (zh) * 2019-01-14 2019-06-07 珠海金山网络游戏科技有限公司 一种游戏应用的热更新方法和装置

Also Published As

Publication number Publication date
JP7090657B2 (ja) 2022-06-24
JP2021002317A (ja) 2021-01-07
US20200401392A1 (en) 2020-12-24
CN110275722A (zh) 2019-09-24
KR102341388B1 (ko) 2021-12-21
KR20200146006A (ko) 2020-12-31
US11281445B2 (en) 2022-03-22

Similar Documents

Publication Publication Date Title
CN110275722B (zh) 用于升级应用的方法、装置、设备和存储介质
US10282195B2 (en) Generating and applying patches to computer program code concurrently with its execution
US8793662B2 (en) Runtime code hooking for print driver and functionality testing
US6542167B1 (en) System and method for flexible software linking
US8458681B1 (en) Method and system for optimizing the object code of a program
US7913243B2 (en) Method and system for generating and applying patches to a computer program concurrently with its execution
US20040034850A1 (en) Servicing a component-based software product throughout the software product lifecycle
JP2013514569A (ja) 静的に型付けされたクラスベースのオブジェクト指向ソフトウェアのノンブロッキング動的更新の方法、コンピュータ・プログラム製品、およびシステム
WO2020238245A1 (zh) 实现函数跳转的方法、装置及计算机存储介质
US20050071856A1 (en) Dynamically loadable stub modules
US7788661B2 (en) Method and system for applying patches to a computer program concurrently with its execution
US9411618B2 (en) Metadata-based class loading using a content repository
US20050039196A1 (en) Method and system for using a library
US20120222023A1 (en) Automatic runtime dependency lookup
JP5895616B2 (ja) 情報処理装置およびプログラム実行方法
US11748078B1 (en) Generating tie code fragments for binary translation
US8190587B1 (en) In-place image promotion
CN115309421A (zh) 单点***的静态变量同步方法、装置、设备及存储介质
CN117234953B (zh) 一种基于影子代码缓存的内核调试方法
Kächele et al. nOSGi: a posix-compliant native OSGi framework
US20240103853A1 (en) Code maintenance system
CN117112138A (zh) 一种指针偏移获取方法、***、设备及存储介质
CN116841657A (zh) 接口函数调用方法和装置
CN117827270A (zh) 一种前端脚本加载方法、装置、设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant