CN102722387B - 动态打补丁的方法和装置 - Google Patents

动态打补丁的方法和装置 Download PDF

Info

Publication number
CN102722387B
CN102722387B CN201210170368.3A CN201210170368A CN102722387B CN 102722387 B CN102722387 B CN 102722387B CN 201210170368 A CN201210170368 A CN 201210170368A CN 102722387 B CN102722387 B CN 102722387B
Authority
CN
China
Prior art keywords
patch
image file
code
function
reorientation
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.)
Expired - Fee Related
Application number
CN201210170368.3A
Other languages
English (en)
Other versions
CN102722387A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201210170368.3A priority Critical patent/CN102722387B/zh
Publication of CN102722387A publication Critical patent/CN102722387A/zh
Application granted granted Critical
Publication of CN102722387B publication Critical patent/CN102722387B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明的实施例公开了动态打补丁的方法和装置。该动态打补丁的方法包括:将包含补丁代码的可重定位的补丁镜像文件动态加载到待打补丁的目标代码所处的当前系统;通过重定位和链接所述补丁镜像文件将所述补丁代码初始化;将所述目标代码的执行跳转到所述补丁代码的执行。

Description

动态打补丁的方法和装置
技术领域
本发明涉及一种动态打补丁的方法和装置。
背景技术
通常,对补丁目标代码打补丁的方案是:先离线将补丁代码编译并链接为以绝对地址开始的补丁镜像文件、随后生成补丁目标代码所包含的函数与补丁镜像文件所包含的补丁函数的相对应的替换关系;再将补丁镜像文件加载到设备后,根据替换关系将补丁目标代码包含的函数的入口指令修改为一条跳转指令:跳转到补丁代码的补丁函数入口,执行补丁代码,从而完成对补丁目标代码打补丁。
发明内容
本发明涉及一种动态打补丁的方法,其包括:将包含补丁代码的可重定位的补丁镜像文件动态加载到待打补丁的目标代码所处的当前系统;通过重定位和链接所述补丁镜像文件将所述补丁代码初始化;将所述目标代码的执行跳转到所述补丁代码的执行。
此外,本发明还涉及一种动态打补丁的装置,其包括:包括:加载单元,用于将包含补丁代码的可重定位的补丁镜像文件动态加载到待打补丁的目标代码所处的当前系统;重定位和链接单元,用于通过重定位和链接所述补丁镜像文件将所述补丁代码初始化;跳转单元,用于将所述目标代码的执行跳转到所述补丁代码的执行。
本发明提供的技术方案,在离线阶段事先将补丁制作为可重定位的镜像文件,比如标准的可执行的链接格式(Executable and Linking Format,简称ELF)目标文件,而不是制作为绝对定位的文件;可以在设备中激活补丁时,根据动态分配到的空间地址和镜像文件中的符号表信息,对补丁中的符号段中的函数和全局变量的符号重新赋值、代码段重定位。不需要为补丁镜像文件预先划分好空间,因此补丁镜像文件的伸缩性好。此外,本发明实施例提供的方法和装置支持对动态加载模块的函数打补丁。同时,借助本发明实施例提供的方法和装置能够实现一个补丁镜像文件适配多个版本镜像。另外,借助本发明实施例提供的方法和装置还能够实现对补丁镜像文件进一步打补丁。
附图说明
下面借助实施例结合以下附图进一步阐述本发明。
其中:
图1示出了本发明实施例提供的一种动态打补丁的方法的示例性流程图;
图2示出了本发明实施例提供的另一种动态打补丁的方法的示例性流程图;
图3示出了本发明实施例提供的另一种动态打补丁的方法的示例性流程图;
图4示出了本发明实施例提供的另一种动态打补丁的方法的示例性流程图;
图5示出了本发明的一个具体实施例的动态打补丁的方法的示例性流程图;
图6示出了本发明实施例提供的一种动态打补丁的装置的示意性框图。
具体实施方式
在下文中将结合附图对本发明的示范性实施例进行描述。为了清楚和简明起见,在说明书中并未描述实际实施方式的所有特征。然而,应该了解,在开发任何这种实际实施方式的过程中可以做出很多特定于实施方式的决定,以便实现开发人员的具体目标,并且这些决定可能会随着实施方式的不同而有所改变。
在此,还需要说明的一点是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的装置结构,而省略了与本发明关系不大的其他细节。
在描述本发明实施例提供的动态打补丁的方式时会涉及如下术语:当前系统、目标代码、补丁代码和补丁镜像文件。在本文中,当前系统可以理解为目标代码和补丁代码等所运行的硬件设备诸如通信系统的硬件设备、个人计算机、个人数字设备等等,或也可以理解为软件环境,诸如计算机操作系统、专用操作系统等等。出于描述的便利的原因,本文中使用的术语“目标代码”理解为待打补丁的程序或代码,而术语“补丁代码”理解为用于打补丁的程序或代码。术语“补丁镜像文件”理解为基于一定的格式将补丁代码编译后的生成的文件。
在图1中示出了本发明实施例提供的一种动态打补丁的方法的示例性流程图。所述方法包括:
110,本发明实施例提供的一种动态打补丁的方法开始运行。
120,将包含补丁代码的可重定位的补丁镜像文件动态加载到待打补丁的目标代码所处的当前系统。
在此需要说明的是,可重定位的补丁镜像文件理解为对补丁代码预处理之后生成的镜像文件,其中该预处理在本技术领域中通常也理解为离线处理,即当前系统外的处理。在此,预处理可以包括对代码进行编译和链接等等。编译就是通常所言的利用编译程序从源语言编写的源程序产生目标程序的过程,而链接是指在电子计算机程序的各模块之间传递参数和控制命令,并把它们组成一个可执行的整体的过程。通常,补丁镜像文件包括:补丁初始化入口函数、补丁函数、文本段、字符段、数据段、重定位段等等,在此并不逐一列举而是仅仅谈及该方法所涉及的相关内容。在此,补丁镜像文件可以是可执行的链接格式(ELF)目标文件,并且以各种编程语言以函数为单位来编辑。
130,通过重定位和链接所述补丁镜像文件将所述补丁代码初始化。对于本领域技术人员而言,重定位理解为,将程序或代码的逻辑地址空间变换成当前系统的内存中的实际物理地址空间的过程。重定位包括动态重定位和静态重定位。在本发明实施例中尤其是涉及动态重定位。也就是说,在补丁镜像文件装入当前系统之后,只有在当前系统调用补丁镜像文件时才动态地将逻辑地址(也称为相对地址)转换为物理地址(也称为绝对地址)。链接则是指从一个对象指向另一个对象的连接关系。在此对象可以理解为例如补丁镜像文件、补丁代码和目标代码等等中的各种函数、符号和全局变量等等。重定位和链接所述补丁镜像文件就是针对补丁镜像文件进行配置,使之与当前系统建立连接关系(也称为映射关系),从而完成所述补丁代码的初始化。
140,将所述目标代码的执行跳转到所述补丁代码的执行。在当前系统调用目标代码时,当前系统根据130中建立的连接关系调用补丁代码并且执行,从而目标代码的执行被通过补丁代码的执行而取代。由此,实现了动态打补丁的过程。
在本发明实施例提供的动态打补丁的过程可以与补丁镜像文件所加载的当前系统的硬件配置和软件配置无关地运行。该过程也无需手工配置补丁镜像文件。
通过将补丁镜像文件动态加载到当前系统,能够支持补丁镜向文件加载到任意动态分配的空间。通过动态加载使补丁代码所需的空间根据需要来进行分配,而不需要为补丁镜像文件预先划分好空间,从而可以实现空间的任意伸缩。通过补丁镜像文件动态加载到当前系统,使补丁镜像文件与当前系统的硬件环境和软件环境无关,因此本发明实施例提供的方法能够支持对动态加载模块的函数打补丁。
图2示出了本发明实施例提供的另一种动态打补丁的方法的示例性流程图。如图2所示,根据本实施例的动态打补丁的方法在210开始。
220,将包含补丁代码的可重定位的补丁镜像文件动态加载到待打补丁的目标代码所处的当前系统。220可以参考图1所示的120来执行。
如图2所示,所述220,将包含补丁代码的可重定位的补丁镜像文件动态加载到待打补丁的目标代码所处的当前系统具体可以包括:221,在所述当前系统中,为所述补丁镜像文件中的文本段和数据段分配运行空间,并且将所述文本段和数据段的内容拷贝到所述运行空间;222,为所述补丁镜像文件中的符号段分配符号空间,并且将所述符号段的内容拷贝到所述符号空间。
在此需要说明的是,在此对221和222的编号并不含有步骤执行顺序方面的含义。
230,通过重定位和链接所述补丁镜像文件将所述补丁代码初始化。230可以参考图1所示的130来执行。
240,将所述目标代码的执行跳转到所述补丁代码的执行。240可以参考图1所示的140来执行。
在此实施例中,所述补丁镜像文件中包含的在所述目标代码中不存在的函数的地址等于所述函数的地址加上所述函数在符号段的实际加载地址;所述补丁镜像文件中包含的在所述目标代码中不存在的全局变量的地址等于所述全局变量的地址加上所述全局变量在符号段的实际加载地址。而对于补丁镜像文件中未涉及的函数、全局变量,函数、全局变量的符号,以在当前系统的符号表中函数、全局变量,函数、全局变量的所述符号的地址赋值给所述未涉及的函数、全局变量,函数、全局变量的符号。
可选地,如图3所示,所述通过重定位和链接所述补丁镜像文件将所述补丁代码初始化具体包括:331,以所述运行空间的地址作为起始绝对地址,对所述符号段中的函数和全局变量的符号赋值;332,通过所述补丁镜像文件的重定位段中包含的指令对所述补丁代码进行重定位;333,调用特定的补丁初始化入口函数来初始化所述补丁代码。
此外可选地,如图4所示,所述通过所述补丁镜像文件的重定位段中包含的指令对所述补丁代码进行重定位具体包括:4321,修改所述目标代码的函数入口指令以跳转到所述补丁代码的补丁函数;4322,将所述补丁镜像文件中包含的在所述目标代码中不存在的函数和全局变量的信息添加到当前系统中。
图5示出了根据本发明的动态打补丁的方法的一个具体实施例的示例性流程图。在该方法中包括:
501,本发明实施例提供的一种动态打补丁的方法开始运行;
502,在当前系统中,为包含补丁代码的可重定位的补丁镜像文件中的文本段和数据段分配运行空间,并且将所述文本段和数据段的内容拷贝到所述运行空间;
503,为所述补丁镜像文件中的符号段分配符号空间,并且将所述符号段的内容拷贝到所述符号空间;
504,以所述运行空间的地址作为起始绝对地址,对所述符号段的函数和全局变量的符号赋值;
505,修改所述目标代码的函数入口指令以跳转到所述补丁代码的补丁函数;
506,将所述补丁镜像文件中包含的在所述目标代码中不存在的的函数和全局变量的信息添加到当前系统中;
507,调用特定的补丁初始化入口函数;
508,将所述目标代码的执行跳转到所述补丁代码的执行。
在此需要指出的是,本具体实施例不应该理解为限制性,而仅仅是为了对本发明的理解更为清楚和准确示例性地示出了本发明实施例的动态打补丁的方法的流程图。该具体实施例中所涉及的术语及其相关含义与根据图1至图4所阐述的动态打补丁的方法中涉及的术语及其相关含义相同,在此出于清楚的原因而不再赘述。
本发明的该具体实施例提供的动态打补丁的过程可以与补丁镜像文件所加载的当前系统的硬件配置和软件配置无关地运行。从而,该过程也无需手工配置补丁镜像文件。由于补丁镜像文件被动态加载到当前系统,所以本发明的该具体实施例提供的动态打补丁的方法能够支持补丁镜向文件加载到任意动态分配的空间。由此,实现了补丁代码所需的空间根据需要进行分配,从而不需为补丁镜像文件预先划分好空间,并且因此可以实现空间的任意伸缩。通过补丁镜像文件动态加载到当前系统,使补丁镜像文件与当前系统的硬件环境和软件环境无关,因此本发明的该具体实施例提供的动态打补丁的方法能够支持对动态加载模块的函数打补丁。
在下文中,将结合图6并且参照根据本发明实施例提供的动态打补丁的方法来阐述根据本发明提供的动态打补丁的装置。
图6示出了本发明实施例提供的一种动态打补丁的装置的示意性框图,用于实现本发明图1所提供的动态打补丁方法。如图6所示,该动态打补丁的装置600包括:
加载单元610,用于将包含补丁代码的可重定位的补丁镜像文件动态加载到待打补丁的目标代码所处的当前系统;
重定位和链接单元620,用于通过重定位和链接所述补丁镜像文件将所述补丁代码初始化;
跳转单元630,用于将所述目标代码的执行跳转到所述补丁代码的执行。
所述加载单元610具体可用于:在所述当前系统中,为所述补丁镜像文件中的文本段和数据段分配运行空间,并且将所述文本段和数据段的内容拷贝到所述运行空间;为所述补丁镜像文件中的符号段分配符号空间,并且将所述符号段的内容拷贝到所述符号空间。
所述重定位和链接单元620具体可用于:以所述运行空间的地址作为起始绝对地址,对所述符号段的函数和全局变量的符号赋值;通过所述补丁镜像文件的重定位段中包含的指令对所述补丁代码进行重定位;调用特定的补丁初始化入口函数来初始化所述补丁代码。
所述补丁镜像文件中包含的在所述目标代码中不存在的函数的地址等于所述函数的地址加上所述函数在符号段的实际加载地址;所述补丁镜像文件中包含的在所述目标代码中不存在的全局变量的地址等于所述全局变量的地址加上所述全局变量在符号段的实际加载地址。对于补丁镜像文件中未涉及的函数和全局变量的符号,以在当前系统的符号表中函数和全局变量的所述符号的地址赋值给所述未涉及的函数和全局变量的符号。具体而言,根据本发明的实施例的动态打补丁的方法中相关术语同样也适用于根据本发明的实施例的动态打补丁的装置。
所述重定位和链接单元620在通过所述补丁镜像文件的重定位段中包含的指令对所述补丁代码进行重定位时,具体用于:修改所述目标代码的函数入口指令以跳转到所述补丁代码的补丁函数;将所述补丁镜像文件中包含的在所述目标代码中不存在的函数和全局变量的信息添加到当前系统中。
在针对上述本发明实施例的动态打补丁的方法所阐述的技术优点和技术效果同样也适用于本发明实施例的动态打补丁的装置,因此在此不再赘述。
本领域技术人员应该理解,本发明实施例中装置模块的划分为功能划分,实际具体结构可以为上述功能模块的拆分或合并。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。权利要求的内容记载的方案也是本发明实施例的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (5)

1.一种动态打补丁的方法,其特征在于,包括:
将包含补丁代码的可重定位的补丁镜像文件动态加载到待打补丁的目标代码所处的当前系统;
通过重定位和链接所述补丁镜像文件将所述补丁代码初始化;
将所述目标代码的执行跳转到所述补丁代码的执行;
其中,所述将包含补丁代码的可重定位的补丁镜像文件动态加载到待打补丁的目标代码所处的当前系统,具体包括:在所述当前系统中,为所述补丁镜像文件中的文本段和数据段分配运行空间,并且将所述文本段和数据段的内容拷贝到所述运行空间,为所述补丁镜像文件中的符号段分配符号空间,并且将所述符号段的内容拷贝到所述符号空间;
所述通过重定位和链接所述补丁镜像文件将所述补丁代码初始化,具体包括:以所述运行空间的地址作为起始绝对地址,对所述符号段中的函数和全局变量的符号赋值,通过所述补丁镜像文件的重定位段中包含的指令对所述补丁代码进行重定位,调用特定的补丁初始化入口函数来初始化所述补丁代码。
2.根据权利要求1所述的动态打补丁的方法,其特征在于,
所述补丁镜像文件中包含的在所述目标代码中不存在的函数的地址等于所述函数的地址加上所述函数在符号段的实际加载地址;
所述补丁镜像文件中包含的在所述目标代码中不存在的全局变量的地址等于所述全局变量的地址加上所述全局变量在符号段的实际加载地址。
3.根据权利要求1或2所述的动态打补丁的方法,其特征在于,所述通过所述补丁镜像文件的重定位段中包含的指令对所述补丁代码进行重定位,具体包括:
修改所述目标代码的函数入口指令以跳转到所述补丁代码的补丁函数;
将所述补丁镜像文件中包含的在所述目标代码中不存在的函数和全局变量的信息添加到当前系统中。
4.一种动态打补丁的装置,其特征在于,包括:
加载单元,用于将包含补丁代码的可重定位的补丁镜像文件动态加载到待打补丁的目标代码所处的当前系统;
重定位和链接单元,用于通过重定位和链接所述补丁镜像文件将所述补丁代码初始化;
跳转单元,用于将所述目标代码的执行跳转到所述补丁代码的执行;
其中,所述加载单元,具体用于在所述当前系统中,为所述补丁镜像文件中的文本段和数据段分配运行空间,并且将所述文本段和数据段的内容拷贝到所述运行空间,为所述补丁镜像文件中的符号段分配符号空间,并且将所述符号段的内容拷贝到所述符号空间;
所述重定位和链接单元,具体用于以所述运行空间的地址作为起始绝对地址,对所述符号段中的函数和全局变量的符号赋值,通过所述补丁镜像文件的重定位段中包含的指令对所述补丁代码进行重定位,调用特定的补丁初始化入口函数来初始化所述补丁代码。
5.根据权利要求4所述的动态打补丁的装置,其特征在于,所述重定位和链接单元在通过所述补丁镜像文件的重定位段中包含的指令对所述补丁代码进行重定位时,具体用于:
修改所述目标代码的函数入口指令以跳转到所述补丁代码的补丁函数;
将所述补丁镜像文件中包含的在所述目标代码中不存在的函数和全局变量的信息添加到当前系统中。
CN201210170368.3A 2012-05-29 2012-05-29 动态打补丁的方法和装置 Expired - Fee Related CN102722387B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210170368.3A CN102722387B (zh) 2012-05-29 2012-05-29 动态打补丁的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210170368.3A CN102722387B (zh) 2012-05-29 2012-05-29 动态打补丁的方法和装置

Publications (2)

Publication Number Publication Date
CN102722387A CN102722387A (zh) 2012-10-10
CN102722387B true CN102722387B (zh) 2015-07-08

Family

ID=46948166

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210170368.3A Expired - Fee Related CN102722387B (zh) 2012-05-29 2012-05-29 动态打补丁的方法和装置

Country Status (1)

Country Link
CN (1) CN102722387B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104239082B (zh) * 2013-06-20 2019-01-15 上海博达数据通信有限公司 嵌入式系统的热补丁实现方法
CN103345412B (zh) * 2013-07-10 2016-08-24 华为技术有限公司 打补丁的方法及装置
CN104424037B (zh) 2013-08-29 2018-12-14 中兴通讯股份有限公司 一种动态补丁函数的方法及装置
CN103632101B (zh) * 2013-12-09 2016-11-16 北京奇虎科技有限公司 一种拦截系统调用的方法和装置
CN103942073B (zh) * 2014-04-08 2017-12-01 北京奇虎科技有限公司 实现系统热补丁的方法及装置
CN103885808A (zh) * 2014-04-08 2014-06-25 北京奇虎科技有限公司 热补丁处理方法及装置
CN103984585A (zh) * 2014-06-06 2014-08-13 浪潮电子信息产业股份有限公司 一种Linux内核可热插拨内核模块运行时升级方法
CN106095502A (zh) * 2016-06-13 2016-11-09 北京奇虎科技有限公司 一种安卓应用的热修复方法、装置、服务器和系统
EP3722981A1 (en) 2019-04-12 2020-10-14 Nxp B.V. System and method for applying patches to executable codes

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1475909A (zh) * 2002-08-16 2004-02-18 华为技术有限公司 一种嵌入式系统软件补丁的实现和控制方法
CN101799763A (zh) * 2009-02-10 2010-08-11 华为技术有限公司 内核在线补丁的方法、装置和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070192761A1 (en) * 2006-02-15 2007-08-16 Ravi Sahita Method for adding integrity information to portable executable (PE) object files after compile and link steps

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1475909A (zh) * 2002-08-16 2004-02-18 华为技术有限公司 一种嵌入式系统软件补丁的实现和控制方法
CN101799763A (zh) * 2009-02-10 2010-08-11 华为技术有限公司 内核在线补丁的方法、装置和系统

Also Published As

Publication number Publication date
CN102722387A (zh) 2012-10-10

Similar Documents

Publication Publication Date Title
CN102722387B (zh) 动态打补丁的方法和装置
KR101213275B1 (ko) 무선 장치에서 사용할모놀리식(monolithic)이미지를 제공하기 위한시스템 및 방법
US9519466B2 (en) Executable code for constrained computing environments
JP4903686B2 (ja) フラッシュメモリのプログラミング
CN103744709B (zh) 补丁加载方法及装置
KR102010508B1 (ko) 소스 코드 파일을 업데이트하는 시스템 및 방법
CN107168749B (zh) 一种编译方法、装置、设备和计算机可读存储介质
US20070079306A1 (en) Object ordering tool for facilitating generation of firmware update friendly binary image
US20070132774A1 (en) System and method for a patch minimization tool
US20090113386A1 (en) Object code generation for increased delta performance
US9841953B2 (en) Pluggable components for runtime-image generation
EP1956482B1 (en) Generating delta updates for a processing device
US20180329725A1 (en) Method and apparatus for loading application
US20120284688A1 (en) System and method for blurring instructions and data via binary obfuscation
CN105446712A (zh) 一种应用程序缺陷修补方法及装置
WO2007020083A2 (en) Feedback linker for increased delta performance
CN110442347A (zh) 安装包编译方法、装置、电子设备及可读存储介质
CN103645888A (zh) 一种自动构建操作系统的系统及方法
CN1879067A (zh) 匹配用于控制工作过程的函数的方法和装置
CN105373384B (zh) 一种软件开发方法和装置
CN103377131A (zh) 数据处理装置和方法
KR100478463B1 (ko) 응용 프로그램의 동적링크 방법
KR100745256B1 (ko) 임베디드 시스템에서의 코드 오버레이 방법
CN100476736C (zh) 在虚拟机环境下调用方法的方法和包括虚拟机的系统
JP7081805B2 (ja) 情報処理装置、ロードモジュール生成方法及びプログラム、並びに、動的プログラム更新システム及び方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150708

Termination date: 20180529