补丁加载方法和装置的制作方法

文档序号:6402218阅读:122来源:国知局
专利名称:补丁加载方法和装置的制作方法
技术领域
本发明实施例涉及计算机领域,尤其涉及一种补丁加载方法和装置。
背景技术
在现代化的工作生活中,通过计算机设备上的应用程序可高效率的帮助人们完成各种工作任务。应用程序是通过人工编译后安装在计算机设备上运行的,但人为的编写程序不可能十全十美,运行时会出现一定的缺陷,则可编写用于修复该缺陷的程序作为补丁,进程运行该应用程序时加载补丁,以保证进程可顺利运行。现有技术中,作为系统文件的动态加载库在进程运行时会被随机加载,当动态加载库中存在缺陷时,如动态加载库中的一个函数编写错误,则进程还需加载动态加载库的补丁,并将错误函数入口处的指令修改为跳转指令指向补丁中正确的函数,保证进程的正确运行。但采用上述方法加载补丁时,动态加载库与补丁文件随进程加载,如果待修正的动态加载库对应的补丁文件与待修正的动态加载库在进程中的地址距离较远,则待修正的动态加载库中的多条原指令需修改为跳转指令,以完成函数的跳转,但多条原指令被修改易引起进程运行崩溃,降低了补丁加载的可靠性。

发明内容
本发明实施例提供一种补丁加载方法和装置,以优化补丁加载过程,提高补丁加载的可靠性。第一方面,本发明实施例提供一种补丁加载方法,包括:将补丁文件加载至第一动态加载库中的补丁区;根据所述补丁文件在所述第一动态加载库中的相对地址以及所述第一动态加载库在第一进程中的地址,确定所述补丁文件在所述第一进程中的地址;其中,所述第一进程为加载所述第一动态加载库的进程;根据所述补丁文件在所述第一进程中的地址运行所述补丁文件。结合第一方面,第一实现方式中,所述第一动态加载库为目标文件的提供方提供的待修正的动态加载库;其中,所述目标文件用于生成所述补丁文件;或者,所述第一动态加载库与所述待修正的动态加载库在所述进程中的地址相邻。结合第一方面或第一方面的第一实现方式,在第二实现方式中,所述补丁区与所述第一动态加载库的代码段相邻。结合第一方面至第一方面第二实现方式中的任意一种方式,在第三实现方式中,所述根据所述补丁文件与所述动态加载库中的相对地址以及所述动态加载库在所述第一进程中的地址,确定所述补丁文件在所述第一进程中的地址之前,还包括:将加载所述补丁文件的所述第一动态加载库加载至多个进程中。结合第一方 面至第一方面第二实现方式中的任意一种方式,在第四实现方式中,所述将补丁文件加载至第一动态加载库中的补丁区之前,还包括:根据所述目标文件包括的字符确定信息替换表;根据所述目标文件的代码段和数据段,所述信息替换表以及动态加载库依赖信息生成所述补丁文件。结合第一方面,在第五实现方式中,所述补丁文件在所述第一动态加载库中的相对地址具体为补丁文件内正确字符在所述第一动态加载库中的相对地址,所述第一动态加载库在所述第一进程中的地址具体为所述第一动态加载库内待修正字符在第一进程中的起始地址;则所述根据所述补丁文件在所述第一动态加载库中的相对地址以及所述第一动态加载库在所述第一进程中的地址,确定所述补丁文件在所述进程中的地址,包括:当所述正确字符对应于所述待修正的动态加载库内的待修正字符时,根据所述补丁文件内正确字符在所述第一动态加载库内的相对地址和所述第一动态加载库在第一进程中的起始地址,获取所述补丁文件内正确字符在所述第一进程中的实际地址;当所述正确字符对应于非所述待修正的动态加载库内的字符时,根据所述动态记载库依赖信息调用显示加载接口,获取所述补丁文件内正确字符在所述第一进程中的实际地址。第二方面,本发明实施例提供一种补丁加载装置,其特征在于,包括:第一加载模块,用于将补丁文件加载至第一动态加载库中的补丁区;确定模块,用于根据所述补丁文件在所述第一动态加载库中的相对地址以及所述第一动态加载库在第一进程中的地址,确定所述补丁文件在所述第一进程中的地址;其中,所述第一进程为加载 所述第一动态加载库的进程;运行模块,用于根据所述补丁文件在所述第一进程中的地址运行所述补丁文件。结合第二方面,在第一实现方式中,所述第一动态加载库为所述目标文件的提供方提供的待修正的动态加载库;其中,所述目标文件用于生成所述补丁文件;或者,所述第一动态加载库与所述待修正的动态加载库在所述进程中的地址相邻。结合第二方面或第二方面第一实现方式,在第二实现方式中,所述补丁区与所述第一动态加载库的代码段相邻。结合第二方面至第二方面第二实现方式,在第三实现方式中,还包括:第二加载模块,用于将加载所述补丁文件的所述第一动态加载库加载至多个进程中。结合第二方面至第二方面第二实现方式,在第四实现方式中,还包括:生成模块,用于根据所述目标文件包括的字符确定信息替换表;还用于根据所述目标文件的代码段和数据段,所述信息替换表以及动态加载库依赖信息生成所述补丁文件。结合第二方面,在第五实现方式中,所述补丁文件在所述第一动态加载库中的相对地址具体为所述补丁文件内正确字符在所述第一动态加载库内的相对地址,所述第一动态加载库在所述第一进程中的地址具体为所述第一动态加载库在第一进程中的起始地址;当所述正确字符对应于所述待修正的动态加载库内的待修正字符时,所述确定模块具体用于根据所述补丁文件内正确字符在所述第一动态加载库内的相对地址和所述第一动态加载库内待修正字符在第一进程中的起始地址,获取所述补丁文件内正确字符在所述第一进程中的实际地址;当所述正确字符对应于非所述待修正的动态加载库内的字符时,所述确定模块还用于根据所述动态记载库依赖信息调用显示加载接口,获取所述补丁文件内正确字符在所述第一进程中的实际地址。本实施例中,由于补丁区位于第一动态加载库中,则补丁文件可随待修正的动态加载库加载至进程中,则不需修改待修正的动态加载库中的多条指令便可使进程跳转至补丁区读取补丁文件,避免了修改待修正的动态加载库中多条指令引起的进程运行崩溃,提高了补丁加载的可靠性。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明补丁加载方法实施例一的流程图;图2为本发明补丁加载方法实施例二的流程图;图3为本发明实施例二进程内第一种补丁区位置示意图;图4为本发明实施例二进程内第二种补丁区位置示意图;图5为本发明补丁加载装置实施例一的结构示意图;图6为本发明补丁加载装置实施例二的结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明补丁加载方法实施例一的流程图。如图1所示,本发明实施例中,执行补丁加载方法的执行主体可以是通信系统中的各种通信设备,例如:PC (personalcomputer,个人计算机)、服务器等终端设备中的补丁加载装置。该方法包括:SlOl,将补丁文件加载至第一动态加载库中的补丁区。当动态加载库中存在缺陷时,如动态加载库中的一个函数编写错误,则包含正确函数的补丁文件可修正存在缺陷的动态加载库。其中,将正确函数编译在目标文件中,再对目标文件进行处理生成可修正缺陷的补丁文件。当目标文件的制作方和待修正的动态加载库的制作方相同的情况时,目标文件编译人员在制作任何动态加载库时会在该动态加载库内留有一定的空间,用于当发现该动态加载库出现缺陷时,可将补丁文件加载至该空间内,即此情况下SlOl中所述的第一动态加载库为目标文件的提供方提供的待修正的动态加载库,该第一动态加载库中包括数据段、代码段和用于加载补丁文件的补丁区;或者,当目标文件的制作方和待修正的动态加载库的制作方不同的情况时,例如一个动态加载库由第一制作方提供,且通常在编译该动态加载库时未预留一定的空间,而第二制作方在使用该动态加载库时发现了缺陷,第二制作方编译目标文件用于修正该缺陷,根据目标文件生成补丁文件,并将补丁文件加载到一个第二制作方提供的独立的动态加载库内,该独立的动态加载库可作为第一动态加载库,但该第一动态加载库中仅包括补丁区,此情况下SlOl中所述的第一动态加载库与待修正的动态加载库在进程中的地址相邻。S102,根据补丁文件在第一动态加载库中的相对地址以及第一动态加载库在第一进程中的地址,确定补丁文件在第一进程中的地址。上述第一进程为加载第一动态加载库的进程,可理解为在实际中加载了该动态加载库的任意进程;而对于未加载至任意进程中的一个动态加载库来说,编译该动态加载库的各条指令依次位于该动态加载库内各行,可以理解为,各行指令位于该动态加载库中的位置即为相对地址,以位于该动态加载库中第一行的指令为例,其相对地址以16进制记为0000,当该动态加载库被加载至进程中,且加载的空间为进程中的地址4000至地址40FF(F在16进制计数中表示15),则上述第一行的指令在进程中的地址即为4000,可将地址4000看作上述第一行的指令在进程中的实际地址,则补丁文件被加载至补丁区,并随该第一动态加载库加载至第一进程中,为使该补丁文件可被进程运行,则补丁加载装置还需根据补丁文件内用于修正缺陷的正确字符进行重定位以确定进程中正确字符的实际地址。当上述第一动态加载库为目标文件的提供方提供的待修正的动态加载库时,正确字符在第一动态加载库的相对地址0060,以及待修正的动态加载库在进程中的起始的实际地址4000,则确定补丁文件中正确字符在进程中的实际地址4060 ;当第一动态加载库与待修正的动态加载库在进程中的地址相邻,且已知正确字符在第一动态加载库的相对地址0060,待修正的动态加载库在进程中占用的空间地址为4000至5FFF,由于第一动态加载库与待修正的动态加载库在进程中的地址相邻,则第一动态加载库在进程中占用的空间起始地址为6000,从而可确定正确字符在进程中的实际地址为6060。由此可知,根据补丁文件中正确字符的相对地址和第一动态加载库在进程中的实际地址,便可在待修正的动态加载库内待修正处给出指向补丁文件中正确字符的实际地址的跳转指令。S103,根据补丁文件在第一进程中的地址运行补丁文件。具体以补丁文件用于修正动态加载库中的错误函数为例,补丁文件被加载至位于进程中的待修正的动态加载库的补丁区时,进程根据待修正的动态加载库中错误函数入口处的跳转指令跳转至补丁文件中正确函数入口处的正确字符,并按照正确函数内各个指令依次运行。
本实施例中,由于补丁区可与待修正的动态加载库中的代码段相邻,或作为补丁区的第一动态加载库与待修正的动态加载库相邻,从而进程将补丁文件加载至进程中待修正的动态加载库内与代码段相邻的补丁区或与待修正的动态加载库相邻的第一动态加载库后,则可不需修改待修正的动态加载库中的多条指令便可使进程跳转至补丁区运行补丁文件内的正确内容,避免了修改待修正的动态加载库中多条指令引起的进程运行崩溃,提高了补丁加载的可靠性。
图2为本发明补丁加载方法实施例二的流程图。如图2所示,该方法包括:S201,分析目标文件和待修正的动态加载库。S202,根据目标文件包括的字符确定信息替换表。上述S202与下述S203可由制作补丁文件的第三方执行,也可由集成制作补丁文件功能的补丁加载装置执行,另外若动态加载库需加载的补丁文件已完成制作,则动态加载库加载补丁文件时直接由S204开始,若补丁文件为完成制作,则在实现加载可修正待修正动态加载库中缺陷的补丁文件时,则由S201处开始执行。在本实施例中以补丁加载装置为例,则补丁加载装置的制作侧分析目标文件和待修正的动态加载库,其中待修正的动态加载库的缺陷以错误函数为例,由于目标文件中表示正确函数的名称与错误函数名称一致,即目标文件与存在缺陷的、待修正的动态加载库之间具备关联性,则补丁加载装置可获知该目标文件中的正确函数对应替换的动态加载库中的错误函数,从而补丁加载装置可确定相关加载信息,该相关加载信息包括信息替换表、动态加载库依赖信息表等,则补丁加载装置并依据目标文件的数据段和代码段及相关加载信息生成补丁文件。具体的,待修正的动态加载库中的缺陷以赋值错误的字符为例,在目标文件中,正确的字符与待修正的动态加载 库中待修正字符一致(都为k),但补丁文件中正确字符k的正确赋值为3000,而待修正的动态加载库中待修正字符的赋值为3500,则进程不再根据待修正字符运行,直接根据跳转指令指向的补丁文件正确字符的正确赋值运行,即补丁文件中的正确字符替换了掉待修正动态加载库中的待修正字符,由此可知,信息替换表中的替换信息“字符k”,告知补丁加载装置的加载侧,待修正的动态加载库中需要替换的信息。更具体的,缺陷以错误函数为例,当补丁加载装置的制作侧发现待修正的动态加载库中错误函数的名称为字符A,目标文件中正确的函数的名称同样为字符A,则补丁加载装置的制作侧比较分析目标文件和待修正的动态加载库,确定出信息替换表,该信息替换表中包含的一种替换信息即为函数名称字符A,则补丁文件加载装置的加载侧加载该补丁文件时可根据该信息替换表获知待修正的动态加载库中的函数A (构成该函数的多条指令及参数)需被补丁文件中的函数A (构成该函数的多条指令及参数)替换。S203,根据目标文件的代码段和数据段,信息替换表以及动态加载库依赖信息生成补丁文件。补丁文件的代码段和数据段用于修正动态加载库缺陷;具体的,补丁文件的结构可如表I所示:表I
权利要求
1.一种补丁加载方法,其特征在于,包括: 将补丁文件加载至第一动态加载库中的补丁区; 根据所述补丁文件在所述第一动态加载库中的相对地址以及所述第一动态加载库在第一进程中的地址,确定所述补丁文件在所述第一进程中的地址;其中,所述第一进程为加载所述第一动态加载库的进程; 根据所述补丁文件在所述第一进程中的地址运行所述补丁文件。
2.根据权利要求1所述的方法,其特征在于,所述第一动态加载库为目标文件的提供方提供的待修正的动态加载库;其中,所述目标文件用于生成所述补丁文件;或者, 所述第一动态加载库与所述待修正的动态加载库在所述进程中的地址相邻。
3.根据权利要求1或2所述的方法,其特征在于,所述补丁区与所述第一动态加载库的代码段相邻。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述根据所述补丁文件在所述第一动态加载库中的相对地址以及所述第一动态加载库在第一进程中的地址,确定所述补丁文件在所述第一进程中的地址之前,还包括: 将加载所述补丁文件的所述第一动态加载库加载至多个进程中。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述将补丁文件加载至第一动态加载库中的补丁区之前,还包括: 根据所述目标文件包 括的字符确定信息替换表; 根据所述目标文件的代码段和数据段,所述信息替换表以及动态加载库依赖信息生成所述补丁文件。
6.根据权利要求1所述的方法,其特征在于,所述补丁文件在所述第一动态加载库中的相对地址具体为所述补丁文件内正确字符在所述第一动态加载库内的相对地址,所述第一动态加载库在所述第一进程中的地址具体为所述第一动态加载库在第一进程中的起始地址; 所述根据所述补丁文件在所述第一动态加载库中的相对地址以及所述第一动态加载库在所述第一进程中的起始地址,确定所述补丁文件在所述进程中的地址,包括: 当所述正确字符对应于所述待修正动态加载库内的待修正字符时,根据所述补丁文件内正确字符在所述第一动态加载库内的相对地址和所述第一动态加载库内第一进程中的起始地址,获取所述补丁文件内正确字符在所述第一进程中的实际地址; 当所述正确字符对应于非待修正动态加载库内的字符时,根据所述动态记载库依赖信息调用显示加载接口,获取所述补丁文件内正确字符在所述第一进程中的实际地址。
7.—种补丁加载装置,其特征在于,包括: 第一加载模块,用于将补丁文件加载至第一动态加载库中的补丁区; 确定模块,用于根据所述补丁文件在所述第一动态加载库中的相对地址以及所述第一动态加载库在第一进程中的地址,确定所述补丁文件在所述第一进程中的地址;其中,所述第一进程为加载所述第一动态加载库的进程; 运行模块,用于根据所述补丁文件在所述第一进程中的地址运行所述补丁文件。
8.根据权利要求7所述的装置,其特征在于,所述第一动态加载库为目标文件的提供方提供的待修正的动态加载库;其中,所述目标文件用于生成所述补丁文件;或者,所述第一动态加载库与所述待修正的动态加载库在所述进程中的地址相邻。
9.根据权利要求7或8所述的装置,其特征在于,所述补丁区与所述第一动态加载库的代码段相邻。
10.根据权利要求7-9任一项所述的装置,其特征在于,还包括: 第二加载模块,用于将加载所述补丁文件的所述第一动态加载库加载至多个进程中。
11.根据权利要求7-9任一项所述的装置,其特征在于,还包括: 生成模块,用于根据所述目标文件包括的字符确定信息替换表; 根据所述目标文件的代码段和数据段,所述信息替换表以及动态加载库依赖信息生成所述补丁文件。
12.根据权利要求7所述的装置,其特征在于,所述补丁文件在所述第一动态加载库中的相对地址具体为所述补丁文件内正确字符在所述第一动态加载库内的相对地址,所述第一动态加载库在所述第一进程中的地址具体为所述第一动态加载库在第一进程中的起始地址; 当所述正确字符对应于所述待修正的动态加载库内的待修正字符时,所述确定模块具体用于根据所述补丁文件内正确字符在所述第一动态加载库内的相对地址和所述第一动态加载库在第一进程中的起始地址,获取所述补丁文件内正确字符在所述第一进程中的实际地址;; 当所述正确字符对应于非所述待修正的动态加载库内的字符时,所述确定模块还用于根据所述动态记载库依赖信息调用显示加载接口,获取所述补丁文件内正确字符在所述第一进程中的实际地址。
全文摘要
本发明实施例提供一种补丁加载方法和装置,包括将补丁文件加载至第一动态加载库中的补丁区;根据所述补丁文件在所述第一动态加载库中的相对地址以及所述第一动态加载库在第一进程中的地址,确定所述补丁文件在所述第一进程中的地址;其中,所述第一进程为加载所述第一动态加载库的进程;根据所述补丁文件在所述第一进程中的地址运行所述补丁文件。本发明实施例提供的补丁加载方法及装置,可不需修改待修正的动态加载库中的多条指令便可使进程由待修正处跳转,运行补丁文件中的正确内容,避免了修改待修正的动态加载库中多条指令引起的进程运行崩溃,提高了补丁加载的可靠性。
文档编号G06F9/445GK103218241SQ201310137319
公开日2013年7月24日 申请日期2013年4月19日 优先权日2013年4月19日
发明者易愈鸿, 刘阳, 梁奔琴, 宋文锦 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1