一种热补丁信息查询方法以及装置与流程

文档序号:11063380阅读:321来源:国知局
一种热补丁信息查询方法以及装置与制造工艺

本发明涉及软件更新领域,尤其涉及一种热补丁信息查询方法以及装置。



背景技术:

随着近年来计算技术的迅猛发展,计算机产品的更新换代速度也随之增快。目前,在软件开发过程中,难免存在一些软件设计方面的漏洞或用户对该软件的新的需求,为了不影响软件的使用,一般以热补丁的方式对该软件进行漏洞修复或更新,即在不中止软件的情况下对该软件进行修复或更新。进程热补丁技术是对运行中的进程在不中断进程运行的前提下对进程加载热补丁的技术。进程热补丁技术的处理方式基本是以函数为单位的,即可通过对出现漏洞或需要更新的函数进行修复,以实现对进程的修复或更新。

进程热补丁技术由热补丁制作装置(也称热补丁制作程序)和热补丁管理装置(也称热补丁管理程序)组成。热补丁制作装置负责制作可被热补丁管理装置识别的热补丁,热补丁管理装置负责对热补丁和目标进程进行操作,例如加载热补丁、激活热补丁、去激活热补丁、卸载热补丁、查询热补丁等。

在热补丁管理装置对目标进程以及热补丁进行操作的过程中,通常需要获取热补丁的信息,因此需要对热补丁函数进行查询。在现有技术中,采用设置静态的配置文件,并由热补丁管理装置将热补丁信息写入配置文件,当需要查询热补丁信息时,则通过读取配置文件来查询热补丁信息的方法。然而,这样的方法无法实现对热补丁信息的实时动态查询,并且一旦配置文件丢失或损坏,则无法对热补丁信息进行查询,用户无法得知热补丁的状态。由于无法得知热补丁的状态,导致热补丁管理装置无法对热补丁以及目标进程进行操作。



技术实现要素:

针对以上问题,本发明的目的在于提供一种热补丁信息查询方法以及装置,能够动态查询热补丁信息,且不存在因文件丢失或损坏而无法查询热补丁信息的情况,提高软件运行的稳定性和安全性。

根据本发明的第一个方面,提供一种热补丁信息查询方法,其特征在于包括步骤:S101:预生成热补丁时,在热补丁中定义热补丁信息数据结构,热补丁包括至少一个热补丁函数,每个热补丁信息数据结构实例对应一个热补丁函数的热补丁信息,在热补丁中生成读取热补丁信息数据结构实例的查询接口;S102:判断热补丁是否被加载,若是,则执行步骤S103,若否,则结束热补丁信息查询;S103:计算查询接口的地址;S104:根据查询接口的地址对查询接口进行调用,并通过查询接口获取热补丁信息数据结构实例,以获得所述热补丁信息。

优选地,判断热补丁是否被加载包括:在目标进程的maps文件中查找热补丁,在目标进程的maps文件中找到热补丁时,判断热补丁被加载,在目标进程的maps文件中未找到热补丁时,判断热补丁未被加载。

优选地,计算查询接口的地址包括:在目标进程的maps文件中获取热补丁的地址,在符号表中获取查询接口偏移地址,将热补丁的地址与接口偏移地址相加以得到查询接口的地址。

优选地,查询接口为接口函数。

优选地,根据查询接口的地址对查询接口进行调用,并通过查询接口获取热补丁信息数据结构实例包括:根据查询接口的地址修改目标进程的寄存器,以模拟目标进程对接口函数的调用。

优选地,查询接口为接口变量。

优选地,根据查询接口的地址对查询接口进行调用,并通过查询接口获取热补丁信息数据结构实例的步骤包括:直接通过查询接口的地址读取接口变量的变量值。

优选地,多个与热补丁函数对应的热补丁信息数据结构实例以链表、数组、树、队列或哈希表中的一种方式连接,当查询接口被调用时,查询接口相应地返回链表的表头、数组的指针、树的根节点、队列的头指针或是哈希表的头节点。

优选地,多个与热补丁函数对应的热补丁信息数据结构实例以链表、数组、树、队列或哈希表中的一种方式连接,当查询接口被调用时,查询接口返回热补丁信息数据结构实例。

优选地,本发明第一方面的热补丁信息查询方法,还包括步骤:当热补丁函数被加载时,新建热补丁函数所对应的热补丁信息数据结构实例。

优选地,本发明第一方面的热补丁信息查询方法,还包括步骤:当热补丁函数状态变化时,对状态变化的热补丁函数所对应的热补丁信息数据结构实例进行读写。

优选地,本发明第一方面的热补丁信息查询方法,还包括步骤:当热补丁函数被卸载时,删除热补丁函数所对应的热补丁信息数据结构实例。

根据本发明的第二个方面,提供一种热补丁信息查询装置,包括:热补丁生成单元,用于预生成热补丁时,在热补丁中定义热补丁信息数据结构,热补丁包括至少一个热补丁函数,每个热补丁信息数据结构实例对应一个热补丁函数的热补丁信息,在热补丁中生成读取热补丁信息数据结构实例的查询接口;判断单元,用于判断热补丁是否被加载,判断热补丁未被加载时,结束查询;计算单元,用于判断单元判断热补丁被加载时,计算单元计算查询接口的地址;调用单元,用于计算单元在计算查询接口的地址后,调用单元根据查询接口的地址对查询接口进行调用,并通过查询接口获取热补丁信息数据结构实例。

本发明通过在热补丁中定义热补丁信息数据结构并生成查询接口,通过调用查询接口读取热补丁信息数据结构实例,从而获得热补丁的信息,因此不需要额外设置配置文件,不会发生因文件丢失或损坏而无法查询热补丁信息的情况,有效地提高了可靠性,进而保障了整体热补丁加载的稳定性。由于热补丁信息存储于热补丁内的热补丁信息数据结构实例中,因此存储、更改热补丁信息更为快速便捷。本发明通过调用热补丁的查询接口读取热补丁信息,因此热补丁信息是动态实时获取的,相较于在配置文件中读取热补丁信息的方法,不会产生信息延迟,从而可以避免文件丢失而无法查询热补丁信息,确保软件系统的漏洞得到及时修复,保证软件运行的安全性,避免软件系统发生崩溃。例如,当本发明实施例的技术方案应用于云计算行业的虚拟化软件的修复,避免虚拟机因崩溃导致用户无法正常访问服务器。

附图说明

以下结合附图和具体实施例对本发明的技术方案进行详细的说明,以使本发明的特性和优点更为明显。

图1为本发明的热补丁信息查询方法的一个实例的流程图;

图2为本发明的包括多个热补丁信息数据结构实例的链表的示意图;

图3为图1中步骤S103的详细流程图;

图4为本发明的热补丁信息查询装置的一个实例的模块示意图。

具体实施方式

以下将对本发明的实施例给出详细的说明。尽管本发明将结合一些具体实施方式进行阐述和说明,但需要注意的是本发明并不仅仅只局限于这些实施方式。相反,对本发明进行的修改或者等同替换,均应涵盖在本发明的权利要求范围当中。

一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。

图1为本发明的热补丁信息查询方法的一个实例的流程图。如图1所示,本实例中的热补丁信息查询方法包括以下步骤:

S101:预生成热补丁时,在热补丁中定义热补丁信息数据结构并生成读取热补丁信息数据结构实例的查询接口。

S102:判断热补丁是否被加载。

S103:计算查询接口的地址。

S104:根据查询接口的地址对查询接口进行调用,并通过查询接口获取热补丁信息数据结构实例。

S105:结束查询。

在加载热补丁前,需要预生成热补丁。生成热补丁的方法使用现有技术中的方法,例如ksplice技术中,首先获取一份运行中进程对应的源码并编译出二进制,称为pre对象,打上源码补丁再次编译后,称为post对象,对post对象和pre对象逐条指令比较并找出存在差异的函数,之后把这些差异函数合并为进程模块形式的热补丁。

在本实例的步骤S101中,在现有的生成热补丁的方法的基础上,在热补丁中定义热补丁信息数据结构,例如热补丁信息数据结构hotpatch_info,该热补丁信息数据结构hotpatch_info包括热补丁信息,热补丁信息包括热补丁名称、热补丁状态、热补丁函数名、原始函数起始地址、原始长度、修改的起始函数地址、修改后的长度。在其他实施中,热补丁信息根据需要设置,并不限于上述所列出的热补丁信息。

图2为本发明的包括多个热补丁信息数据结构实例的链表的示意图。如图2所示,一个热补丁中包括一个或多个热补丁函数,一个热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024对应一个热补丁函数的热补丁信息。

当有多个热补丁函数时,多个与热补丁函数对应的热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024以链表200方式连接。

当热补丁函数被加载时,新建该热补丁函数所对应的热补丁信息数据结构hotpatch_info实例2022,即在链表中插入新的节点。

当热补丁函数状态变化时,对相应的状态变化的热补丁信息数据结构hotpatch_info实例2022进行读写。例如,特定热补丁函数被激活时,则通过该热补丁函数名称或标识符遍历链表200查找到该热补丁函数,对该热补丁函数对应的热补丁信息数据结构hotpatch_info实例2022的热补丁状态等字段值进行读写。

当热补丁函数被卸载时,删除热补丁函数所对应的热补丁信息数据结构hotpatch_info实例2022,即从链表200中删除相对应的节点。

由此可看出,热补丁信息是通过热补丁信息数据结构实例被存储在热补丁内部的,因此能够保证热补丁信息不被损坏或是丢失,提高了可靠性以及稳定性。在对热补丁信息进行生成、修改等操作时,通过热补丁本身操作热补丁信息数据结构实例即可完成,无需再使用外部文件,从而保证了修改可靠性,提高了运行速度。

当有多个热补丁函数时,在其他实施例中,多个与热补丁函数一一对应的热补丁信息数据结构实例以数组、树、队列或哈希表中的一种方式或是其他本领域所知悉的连接数据的方式连接。

在步骤S101中还需要生成读取热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024的查询接口。

在本实施例中,查询接口为接口函数,例如接口函数get_hotpatch_info()。通过调用接口函数get_hotpatch_info()获取热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024。

当多个与热补丁函数对应的热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024以链表200连接时,作为一种实施方式,通过调用接口函数get_hotpatch_info(),接口函数get_hotpatch_info()返回链表的表头201,然后通过表头201遍历链表200,以得到热补丁信息。

接着如步骤S102判断热补丁是否被加载。加载是指将编译后的热补丁加载至目标进程的虚拟地址空间。在本实施例中,通过在目标进程的maps文件中查找热补丁,以确定热补丁是否被加载。具体而言,每个进程都具有一个进程标识符(PID)用于标识进程,根据目标进程的进程标识符获取目标进程的maps文件。maps文件通常用于查看进程的虚拟地址空间使用情况,其包括被映射的文件名以及地址等若干列数据。在目标进程的maps文件中的被映射的文件名列中查找热补丁名称,以确定热补丁是否被加载。

如果在目标进程的maps文件中没有查找到热补丁,则表明热补丁没有被加载到目标进程的虚拟地址空间,接着进入步骤S105结束查询,此时热补丁状态为卸载。具体而言,由于热补丁没有被加载,即热补丁处于卸载的状态,无需再对热补丁的具体信息进行查询,因此结束热补丁信息查询的流程,并向用户显示热补丁状态为卸载。

如果在目标进程的maps文件中查找到热补丁,则表明热补丁已经被加载到目标进程的虚拟地址空间,接着进入下面的步骤S103。

如步骤S103,判断热补丁被加载时,计算查询接口的地址。图3为图1中步骤S103的详细流程图,如图1以及图3所示,首先执行步骤S1031在目标进程的maps文件中获取热补丁的地址。具体而言,在步骤S102中涉及的maps文件里,获取与热补丁名称相对应的被映射的文件名所在数据行的地址信息,从而获得热补丁的起始地址。

接着如步骤S1032,在热补丁的符号表中获取查询接口偏移地址。具体而言,查询接口偏移地址即是指查询接口在热补丁中的相对地址。热补丁的符号表中包括名称以及相对地址等若干列数据,获取与查询接口名称相对应的名称所在数据行的相对地址信息,从而获得查询接口在热补丁中的相对地址。

接着如步骤S1033,将热补丁的地址与查询接口偏移地址相加,从而获得查询接口的地址。

获得查询接口地址后进入步骤S104,根据查询接口的地址对查询接口进行调用,并通过查询接口获取热补丁信息数据结构实例2021,2022,2023,2024。

具体而言,根据接口函数get_hotpatch_info()的地址修改目标进程的寄存器,以模拟目标进程对接口函get_hotpatch_info()的调用。这里修改目标进程的寄存器,以模拟目标进程对接口函数get_hotpatch_info()的调用的具体方法采用现有的对进程的寄存器进行修改以实现函数调用的方法,例如包括通过修改指令指针寄存器(IP寄存器),使其下一条执行的指令地址指向接口函数get_hotpatch_info()的地址,即在上述步骤S1033中获取的查询接口的地址,从而使得目标进程执行接口函数get_hotpatch_info(),以获取热补丁函数对应的热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024。

当有多个热补丁函数时,作为一种实施方式,当接口函数get_hotpatch_info()被调用时,接口函数get_hotpatch_info()返回链表200的表头201。因此通过对链表表头201的操作获得热补丁函数对应的热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024,例如通过表头201遍历链表200以得到所有热补丁函数的热补丁信息。例如通过表头201以及特定热补丁函数的标识符得到特定热补丁函数的热补丁信息。例如通过表头201以及特定热补丁的标识符得到该热补丁所包含的所有热补丁函数的热补丁信息。

由于本实施例中调用接口函数仅需返回链表200的表头201,因此接口函数本身设置较为简单,加快了运行速度,减少了维护热补丁的成本。

在其他实施例中,多个与热补丁函数对应的热补丁信息数据结构实例以数组、树、队列或哈希表中的一种方式连接,当查询接口被调用时,查询接口相应地返回数组的指针、树的根节点、队列的头指针或是哈希表的头节点。接着通过对数组的指针、树的根节点、队列的头指针或是哈希表的头节点的操作获得热补丁函数的热补丁信息。多个热补丁信息数据结构实例以其他等同的方式连接时,也相应地返回可进行操作的类似头节点或指针的等同物。

在另一种实施方式中,当接口函数get_hotpatch_info()被调用时,接口函数get_hotpatch_info()直接返回热补丁信息数据结构实例2021,2022,2023,2024。具体而言,设置当接口函数get_hotpatch_info()被调用时,返回所有的热补丁信息数据结构实例2021,2022,2023,2024。在其他实施例中,设置接口函数get_hotpatch_info()被调用时,同时附加特定热补丁函数标识符等参数,从而接口函数get_hotpatch_info()遍历由多个与热补丁对应的热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024组成的链表200,并通过热补丁标识符等参数返回对应的热补丁信息数据结构实例2022。

需要注意的是,通过查询接口对热补丁信息数据结构实例的读取还可以使用其他的实施方式,并不以上述介绍的为限,只要满足通过查询接口对热补丁信息数据结构实例进行读取操作即可。

在获取热补丁信息后,进入步骤S105结束查询,并向用户展示目标进程上的热补丁信息。由于在调用查询接口时,查询接口是运行在目标进程中的,所以能够动态实时地反映目标进程中热补丁的信息。

在一变形的实施例中,查询接口为接口变量,例如接口变量hotpatch_info_list。通过读取接口变量hotpatch_info_list的变量值获取获取热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024。

具体而言,根据步骤S103中获取的接口变量hotpatch_info_list的地址,通过ptrace函数调用上述地址,以获得变量hotpatch_info_list的变量值。ptrace函数是Linux系统的系统函数,提供了一种使父进程得以监视和控制其它进程的方式,以实现断点调试和系统调用的跟踪。

当多个与热补丁对应的热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024以链表200方式连接时,作为一种实施方式,读取接口变量hotpatch_info_list,接口变量hotpatch_info_list返回链表200的表头201,通过表头201遍历链表200,以得到热补丁信息。具体而言,根据接口变量hotpatch_info_list的地址,通过ptrace函数调用地址,从而获得多个热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024组成的链表200的表头201,然后通过表头201遍历链表200,得到所有热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024的地址,再通过ptrace函数调用,得到每个热补丁信息数据结构hotpatch_info实例2021,2022,2023,2024对应的变量成员的值。

变形实施例中的其他方法均与原实施例类似,具体参照上述对原实施例的描述,此处不再赘述。

需要注意的是,除了接口函数以及接口变量,也可以采用其他查询接口的方式,只要符合通过对查询接口的调用能够读取热补丁信息数据结构实例即可。

从以上对热补丁信息查询方法的描述可看出,本发明在热补丁中定义包括热补丁信息的热补丁信息数据结构并生成读取热补丁信息数据结构实例2021,2022,2023,2024的查询接口,当热补丁加载到目标进程中时,通过调用运行在目标进程中的查询接口,从而获得热补丁信息。因此本发明不需要额外设置配置文件用于记录热补丁信息,所有的信息都保存在目标进程的热补丁中,因此不会发生信息丢失或是损坏的情况,提高了热补丁信息查询的可靠性以及稳定性,进而保障了整体热补丁加载的稳定性。

同时本发明对热补丁信息存储于热补丁内部,因此存储、更改热补丁信息更为快速且可靠性更高。由于对于热补丁信息查询是动态实时的,因此不会发生热补丁信息延迟的情况,查询可靠性得到了保证,从而可以确保软件系统的漏洞得到及时修复,保证软件运行的安全性,避免软件系统发生崩溃。例如,当本发明实施例的技术方案应用于云计算行业的虚拟化软件的修复,避免虚拟机因崩溃导致用户无法正常访问服务器。可以理解的是,本发明实施例的热补丁信息查询方法也可以应用于其他修复软件的实例中。

本发明还提供了一种热补丁信息查询装置,图4为本发明的热补丁信息查询装置的一个实例的模块示意图。

如图4所示,本实施例中的热补丁信息查询装置1包括热补丁生成单元101,判断单元102,计算单元103以及调用单元104。

其中,热补丁生成单元101用于在热补丁中定义热补丁信息数据结构并生成读取热补丁信息数据结构实例2021,2022,2023,2024的查询接口。判断单元102用于判断热补丁是否被加载。计算单元103用于计算查询接口的地址。调用单元104用于根据查询接口的地址对查询接口进行调用,并通过查询接口获取热补丁信息数据结构实例。

结合图1,图2,图3以及图4,热补丁信息查询装置1参照上文中热补丁信息查询方法而进行工作。

首先由热补丁生成单元101执行步骤S101,即预生成热补丁时,在热补丁中定义包括热补丁信息的热补丁信息数据结构并生成读取热补丁信息数据结构实例2021,2022,2023,2024的查询接口。查询接口同样被设置为接口函数或是接口变量。

接着判断单元102执行步骤S102,即判断热补丁是否被加载。当判断热补丁未被加载时,结束查询热补丁信息的流程,并向用户返回热补丁状态为卸载。

当判断单元102判断热补丁被加载时,则由计算单元103执行步骤S103,首先在目标进程的maps文件中获取热补丁的地址,接着在热补丁的符号表中获取查询接口偏移地址,将两者相加从而获得查询接口的地址。

接着,调用单元104根据查询接口的地址对查询接口进行调用。查询接口在目标进程中运行,并将热补丁函数所对应的热补丁信息数据结构实例2021,2022,2023,2024通过查询接口反馈。调用单元104获取热补丁信息数据结构实例2021,2022,2023,2024,也就是热补丁信息。

具体的方法如上述热补丁信息查询方法描述的流程所述,此处不再一一赘述。

本发明的热补丁信息查询装置1在本实施例中单独为一个装置,在其他实施例中,热补丁信息查询装置被分割并分别包含于热补丁制作装置以及热补丁管理装置中。例如,热补丁生成单元101包含于热补丁制作装置中,判断单元102,计算单元103以及调用单元104包含于热补丁管理装置中。

需要说明的是,本发明是热补丁查询的一种应用。在本发明的实现过程中,会涉及到多个软件功能模块的应用。如在仔细阅读申请文件、准确理解本发明的实现原理和发明目的以后,在结合现有公知技术的情况下,本领域技术人员完全可以运用其掌握的软件编程技能实现本发明,将本发明中的所有实施例,实施方式,变形实施例中的技术特征进行自由组合。前述热补丁生成方法以及热补丁加载方法的其他实施细节均参照现有技术实施。

以上仅是本发明的具体应用范例,对本发明的保护范围不构成任何限制。除上述实施例外,本发明还可以有其它实施方式。凡采用等同替换或等效变换形成的技术方案,均落在本发明所要求保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1