一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于虚拟机模拟软件的热补丁制作和应用方法、装置与流程

2022-08-21 13:41:21 来源:中国专利 TAG:
1.本发明涉及计算机
技术领域
:,尤其涉及一种用于虚拟机模拟软件的热补丁制作和应用方法、装置。
背景技术
::2.qemu是一套由fabricebellard编写的以gpl许可证分发源码的虚拟机模拟软件,可搭配kvm完成虚拟机的模拟,目前广泛应用于云计算场景。qemu可以使用用户态程序补丁技术来进行快速的在线修复。这种用户态热补丁技术通过对比运行中的程序的编译标识(buildid)以及热补丁中的build来判断热补丁的正确性。3.由于程序的buildid非常易变,在编译环境以及代码有改动的情况下buildid都会发生改变。因此现有的热修复技术需要保证运行程序的编译环境与制作热补丁的编译环境完全一致,对于编译环境不一致但已经运行的qemu程序不能进行热补丁的修复。技术实现要素:4.有鉴于此,本发明实施例提供一种用于虚拟机模拟软件的热补丁制作和应用方法、装置,通过在热补丁文件中设置替换函数的校验码用于校验热补丁文件正确性,能够在保持热补丁应用正确性的基础上,实现运行qemu的编译环境与制作热补丁的编译环境解耦,使得qemu热补丁文件能够应用于运行环境中存在多个qemu版本的情况,显著提升qemu热补丁的应用范围以及效率。5.为实现上述目的,根据本发明实施例的一个方面,提供了用于虚拟机模拟软件的热补丁制作方法,包括:6.制作目标版本虚拟机模拟软件的热补丁中间文件;所述热补丁中间文件包括:所述目标版本虚拟机模拟软件在制作环境下的第二编译标识、待修改函数的替换函数、替换函数的校验信息;7.在所述制作环境下运行所述热补丁中间文件,确定所述替换函数的校验码;8.根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识;9.利用所述第一编译标识替换所述热补丁中间文件中的第二编译标识、利用每个所述替换函数的校验码更新所述热补丁中间文件中的校验信息,得到所述目标版本虚拟机模拟软件的热补丁文件。10.可选地,确定所述替换函数的校验码,包括:确定所述替换函数预设位置的若干字节的总和校验码,以所述总和校验码作为所述替换函数的校验码。11.可选地,在根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识之前,还包括:创建各个版本的虚拟机模拟软件在运行环境下的第一编译标识、在制作环境下的第二编译标识以及提交版本标识之间的映射关系;12.根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识,包括:从所述映射关系中获取与所述目标版本虚拟机模拟软件的提交版本标识对应的第一编译标识。13.可选地,在得到所述目标版本虚拟机模拟软件的热补丁文件之后,还包括:根据所述目标版本虚拟机模拟软件的第一编译标识命名所述目标版本虚拟机模拟软件的热补丁文件。14.根据本发明实施例的第二方面,提供一种用于虚拟机模拟软件的热补丁应用方法,包括:15.根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件;所述热补丁文件是采用本发明实施例第一方面提供的热补丁制作方法制作得到的,包括:所述目标版本虚拟机模拟软件在制作环境下的第二编译标识、待修改函数的替换函数、替换函数的校验信息;16.确定所述目标版本虚拟机模拟软件的热补丁文件中每个替换函数的校验码;17.判断确定出的替换函数的校验码与所述热补丁文件中替换函数的校验码是否一致;若是,则利用所述热补丁文件中的替换函数替换所述目标版本虚拟机模拟软件中对应的替换函数。18.可选地,在根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件之前,还包括:接收由各个版本的所述虚拟机模拟软件的热补丁文件打包形成的热补丁文件包;19.根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件,包括:从所述热补丁文件包中获取与所述目标版本虚拟机模拟软件在运行环境下的第一编译标识对应的热补丁文件。20.根据本发明实施例的第三方面,提供用于虚拟机模拟软件的热补丁制作装置,包括:21.中间文件制作模块,制作目标版本虚拟机模拟软件的热补丁中间文件;所述热补丁中间文件包括:所述目标版本虚拟机模拟软件在制作环境下的第二编译标识、待修改函数的替换函数、替换函数的校验信息;22.补丁信息获取模块,在所述制作环境下运行所述热补丁中间文件,确定所述替换函数的校验码;根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识;23.补丁文件制作模块,利用所述第一编译标识替换所述热补丁中间文件中的第二编译标识、利用每个所述替换函数的校验码更新所述热补丁中间文件中的校验信息,得到所述目标版本虚拟机模拟软件的热补丁文件。24.可选地,所述补丁信息获取模块确定所述替换函数的校验码,包括:确定所述替换函数预设位置的若干字节的总和校验码,以所述总和校验码作为所述替换函数的校验码。25.可选地,所述热补丁制作装置还包括映射关系维护模块,用于:在根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识之前,创建各个版本的虚拟机模拟软件在运行环境下的第一编译标识、在制作环境下的第二编译标识以及提交版本标识之间的映射关系;26.所述补丁信息获取模块根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识,包括:从所述映射关系中获取与所述目标版本虚拟机模拟软件的提交版本标识对应的第一编译标识。27.可选地,所述补丁文件制作模块还用于:在得到所述目标版本虚拟机模拟软件的热补丁文件之后,根据所述目标版本虚拟机模拟软件的第一编译标识命名所述目标版本虚拟机模拟软件的热补丁文件。28.根据本发明实施例的第四方面,提供用于虚拟机模拟软件的热补丁应用装置,包括:29.补丁文件获取模块,根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件;所述热补丁文件是采用本发明实施例第一方面提供的热补丁制作方法制作得到的,包括:所述目标版本虚拟机模拟软件在制作环境下的第二编译标识、待修改函数的替换函数、替换函数的校验信息;30.补丁文件应用模块,确定所述目标版本虚拟机模拟软件的热补丁文件中每个替换函数的校验码;判断确定出的替换函数的校验码与所述热补丁文件中替换函数的校验码是否一致;若是,则利用所述热补丁文件中的替换函数替换所述目标版本虚拟机模拟软件中对应的替换函数。31.可选地,所述补丁文件获取模块还用于:在根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件之前,接收由各个版本的所述虚拟机模拟软件的热补丁文件打包形成的热补丁文件包;32.所述补丁文件获取模块根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件,包括:从所述热补丁文件包中获取与所述目标版本虚拟机模拟软件在运行环境下的第一编译标识对应的热补丁文件。33.根据本发明实施例的第五方面,提供一种用于虚拟机模拟软件的热补丁管理电子设备,包括:34.一个或多个处理器;35.存储装置,用于存储一个或多个程序,36.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例第一或第二方面提供的方法。37.根据本发明实施例的第六方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例第一或第二方面提供的方法。38.上述发明中的一个实施例具有如下优点或有益效果:通过在热补丁文件中设置替换函数的校验码用于校验热补丁文件正确性,能够在保持热补丁应用正确性的基础上,实现运行qemu的编译环境与制作热补丁的编译环境解耦,使得qemu热补丁文件能够应用于运行环境中存在多个qemu版本的情况,显著提升qemu热补丁的应用范围以及效率。39.上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。附图说明40.附图用于更好地理解本发明,不构成对本发明的不当限定。其中:41.图1是应用本发明实施例的热补丁制作方法和热补丁应用方法的系统架构的示意图;42.图2是本发明实施例的用于虚拟机模拟软件的热补丁制作方法的主要流程的示意图;43.图3是本发明可选实施例中qemu版本信息表的示意图;44.图4是本发明可选实施例中热补丁中间文件的示意图;45.图5是本发明可选实施例中替换函数的校验码的计算示意图;46.图6是本发明可选实施例中热补丁文件的示意图;47.图7是本发明实施例的用于虚拟机模拟软件的热补丁应用方法的主要流程的示意图;48.图8是本发明可选实施例中热补丁应用的示意图;49.图9是本发明可选实施例中热补丁应用的主要流程示意图;50.图10是本发明实施例的用于虚拟机模拟软件的热补丁制作装置的主要模块的示意图;51.图11是本发明实施例的用于虚拟机模拟软件的热补丁制作装置的主要模块的示意图;52.图12是本发明实施例可以应用于其中的示例性系统架构图;53.图13是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。具体实施方式54.以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。55.qemu是一套由fabricebellard编写的以gpl许可证分发源码的虚拟机模拟软件,可搭配kvm(linux内核虚拟机,利用linux内核以及硬件虚拟化技术实现虚拟机)完成虚拟机的模拟。在云计算场景中,云服务商通常使用qemu作为虚拟机监视器(hypervisor)实现系统虚拟机(以下简称虚拟机)。qemu是实现虚拟机的底层软件,虚拟机承载了客户的不同业务。云计算场景中为了保持客户业务的连续性,不能随便对虚拟机进行重启以及关机等维护。当qemu遇到软件问题以及有安全漏洞需要修复时,需要在不关机的情况下对虚拟机进行修复。热迁移技术可以做到在虚拟机暂停很短的时间内进行对qemu版本进行更新,但是热迁移时间较长,需要预留大量备机来进行操作。如果服务器规模较大、无法在短时间内快速修复,对于级别高的安全漏洞来说,会对虚拟机的安全性造成极大的风险。因此需要对qemu进行快速修复。qemu可以使用用户态程序补丁技术来进行快速的在线修复,这种技术能够在程序运行过程中对程序进行功能修复,对于在运行过程中不能重启的应用程序的问题修复以及功能更新有着重要的作用。56.使用编译器编译程序后会生成编译标识(buildid)记录在程序的二进制中,用于记录编译的唯一性。当程序源代码改变以及编译环境改变时,buildid就会发生改变。目前,用户态热补丁技术通过两步来完成程序的修复。第一步是热补丁制作过程,通过比较打过补丁(patch,代表对程序的修复)的文件与源文件编译后的汇编文件之间的差异生成补丁文件,补丁文件记录编译过程中程序的buildid。第二步是应用热补丁过程,通过对运行程序地址空间进行扫描,对比程序的buildid与补丁文件中buildid的区别来区分是否是正确的补丁文件。在补丁文件正确的情况下,通过利用补丁文件中的替换函数替换程序中运行的函数来完成功能的更新。由于程序的buildid非常易变,在编译环境以及代码有改动的情况下buildid都会发生改变。因此现有的热修复技术需要保证运行程序的编译环境与制作热补丁的编译环境完全一致。基于这种限定,在制作热补丁文件时首先需要改造运行qemu程序的编译环境,对于环境不一致但已经运行的qemu程序不能进行热补丁修复,限定了热补丁技术的应用范围。57.在某些场景(比如公有云)大规模计算节点运行的qemu实例非常多,有些qemu程序由于一直未关机已经运行了几年,随着qemu程序的更新换代会有新版本的qemu运行起来,因此在真实的运行环境中存在多个不同版本的qemu程序在运行,并且很多qemu程序没有经过编译环境的改造。在此环境下,现有的用户态热补丁技术不能对这种情况进行热补丁修复。58.有鉴于此,本发明提供一套完整的qemu热补丁制作以及应用的方法和装置,能够将qemu热补丁文件的制作环境与系统运行qemu的编译环境解耦,并且能够保持热补丁应用的正确性。图1是应用本发明实施例的热补丁制作方法和热补丁应用方法的系统架构的示意图。如图1所示,本发明实施例涉及用于虚拟机模拟软件的热补丁制作方面和热补丁应用方面。59.根据本发明实施例的一个方面,提供了用于虚拟机模拟软件的热补丁制作方法。图2是本发明实施例的用于虚拟机模拟软件的热补丁制作方法的主要流程的示意图,如图2所示,用于虚拟机模拟软件的热补丁制作方法,包括:步骤s201、步骤s202、步骤s203和步骤s204。60.步骤s201,制作目标版本qemu的热补丁中间文件。61.制作qemu的热补丁文件时qemu二进制文件的编译环境和运行qemu时qemu二进制文件的编译环境不一定相同。为了便于区分,将制作热补丁中间文件时qemu二进制文件的编译环境称作制作环境,在制作环境下编译qemu二进制文件得到的编译标识称为第二编译标识;将运行qemu时qemu二进制文件的编译环境称作运行环境,在运行环境下编译qemu二进制文件得到的编译标识称为第一编译标识。62.在运行环境中可能存在多个不同版本的qemu程序在运行,针对每个版本的qemu可以分别制作热补丁文件。在本发明实施例中,在制作热补丁文件的过程中,先制作热补丁中间文件,然后对热补丁中间文件中的部分字段信息进行替换得到最终的热补丁文件。每个版本qemu的热补丁中间文件用于修复对应版本的qemu。热补丁中间文件中包括目标版本qemu在制作环境下的第二编译标识、待修改函数的替换函数以及替换函数的校验信息。热补丁中间文件的制作方式可以根据实际情况进行选择性确定,例如通过比较打过补丁(patch)的文件与源文件编译后的汇编文件差异生成补丁文件,补丁文件记录在制作环境下编译过程中qemu二进制的第二编译标识。63.校验信息是指校验码信息,用于校验替换函数是否确定,通常情况下,一个校验信息或者校验码唯一表示一个替换函数。校验码的生成方式可以根据实际情况进行选择性设定,例如以替换函数的函数名称作为校验码。在可选的实施例中,先确定替换函数预设位置的若干字节的总和校验码(checksum,常用于校验两个二级制是否一致),以该checksum作为替换函数的校验码。此处提及的预设位置,可以是替换函数的所有字节,也可以是替换函数的部分字节,例如替换函数前5或6位字节。用于确定校验码的字节数越多,确定出的校验码标识函数唯一性的概率越大。示例性地,初始状态下尚未确定出目标版本qemu中待修改函数对应的可替换函数的校验码,因此可以将该替换函数的校验码设置为checksum_0。64.在qemu热补丁制作过程中涉及到两种qemu二进制文件,分别如下:qemu_online.bin:系统运行qemu程序对应的二进制文件,对应的编译标识buildid记为buildid1;qemu_build.bin:制作环境编译出的qemu二进制文件,即带有补丁的二进制文件,对应的编译标识buildid记为buildid2。65.图4是本发明可选实施例中热补丁中间文件的示意图。在图2示出的实施例中,对kpatch_make(libcare软件下面的一个工具,用于制作原始热补丁)进行改进,在原始kpatch_make的基础上增加替换函数的checksum计算功能,然后使用改进过的kpatch_make制作热补丁中间文件。带有补丁的二进制文件qemu_build.bin中包含待修改函数的所有信息,kpatch_make遍历这些待修改函数。将每个函数后面增加checksum字段,去除多于部分和与补丁无关的正常qemu二进制的信息,生成热补丁中间文件。热补丁中间文件的构成如图4所示,包括目标版本qemu在制作环境下的第二编译标识buildid2、待修改函数的替换函数funca_witch_patch以及替换函数的校验信息checksum_0。66.现有技术制作的热补丁文件中包含程序buildid,通过对比程序的buildid与热补丁文件中buildid是否一致来判断是否是正确的热补丁文件。然而,程序的buildid非常易变,因此这种判断热补丁文件是否正确的方式限定了热补丁技术的应用范围。本发明实施例中,热补丁文件中包含替换函数的校验码。初始状态下尚未确定出目标版本qemu中待修改函数对应的可替换函数的校验码,因此可以将校验码设置为空或者默认值(例如0)。67.通过替换函数的校验码判断热补丁文件是否正确,能够在判断热补丁文件是否正确的基础上,将qemu热补丁文件的制作环境与运行qemu的编译环境解耦,使得qemu热补丁文件能够应用于运行环境中存在多个qemu版本的情况,显著提升qemu热补丁文件的应用范围以及效率。68.步骤s202,在制作环境下运行所述热补丁中间文件,确定替换函数的校验码。69.在可选的实施例中,先确定替换函数预设位置的若干字节的总和校验码(checksum),以该checksum作为替换函数的校验码。此处提及的预设位置,可以是替换函数的所有字节,也可以是替换函数的部分字节,例如替换函数前5或6位字节。用于确定校验码的字节数越多,确定出的校验码标识函数唯一性的概率越大。图5是本发明可选实施例中替换函数的校验码的计算示意图。在图5示出的实施例中,获取到运行的qemu,通过hotpatch提供的函数地址,在进程的地址空间内计算函数前五个字节的和checksum,将此数值作为校验码,算法如下:checksum=buf[0] buf[1] buf[2] buf[3] buf[4],其中buf是函数在内存中的首地址。当热补丁中间文件中包括多个替换函数时,按照上述步骤分别确定每个替换函数的校验码。[0070]步骤s203,根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识。[0071]目前qemu使用git(一种软件版本管理工具)进行版本管理。git是分布式代码托管系统,用于用户程序代码的维护与托管。针对git的每一个改动的提交会产生一个commitid,可以使用commitid对程序的改动进行追踪。对于线上运行的代码,每发布一个版本必然确定对应一个修改,每个修改对应这个一个提交版本标识(commitid),因此每个buildid必然与一个commitid对应。qemu的版本与commitid呈一一对应的关系。如果只有一个版本,那么也会存在一个buildid。初始版本没有修改,对应一个初始的commitid。本步骤中,通过commitid确定buildid2对应的buildid1,能够将qemu热补丁文件的制作环境与运行qemu的编译环境解耦,使得qemu热补丁文件能够应用于运行环境中存在多个qemu版本的情况,显著提升qemu热补丁文件的应用范围以及效率。[0072]在可选的实施例中,在根据目标版本虚拟机模拟软件的提交版本标识获取目标版本虚拟机模拟软件在运行环境下的第一编译标识之前,创建各个版本的虚拟机模拟软件在运行环境下的第一编译标识、在制作环境下的第二编译标识以及提交版本标识之间的映射关系。根据目标版本虚拟机模拟软件的提交版本标识获取目标版本虚拟机模拟软件在运行环境下的第一编译标识包括:从映射关系中获取与目标版本虚拟机模拟软件的提交版本标识对应的第一编译标识。[0073]示例性地,首先收集线上运行的所有qemu版本,并且提取出所有qemu版本的buildid1。使用现有环境分别编译对应版本的qemu二进制文件并提取buildid2。建立一张qemu的commitid与qemu二进制的表(buildid.table),该标记录了线上运行的所有qemu的commitid以及对应qemu二进制的buildid1。图3是本发明可选实施例中qemu版本信息表的示意图,在图3中,字段qemuverison代表qemu的版本,binarybuildid代表线上运行的qemu二进制的buildid1。nowbuildid代表现有环境编译出的二进制文件的buildid2。在图3示出的实施例中,系统中有五个版本的qemu在运行,其中前三个版本较旧无法获取编译时的环境,因此现有的编译环境编译出的nowbuildid与binarybuildid不相同,后两个版本的nowbuildid与binarybuild相同。[0074]步骤s204,利用第一编译标识替换所述热补丁中间文件中的第二编译标识、利用每个所述替换函数的校验码更新所述热补丁中间文件中的校验信息,得到所述目标版本虚拟机模拟软件的热补丁文件。[0075]示例性地,在图4示出的热补丁中间文件中,根据目标版本qemu的commitid通过build.table找到线上运行的qemubuildid。具体地,通过如下命令制作最后应用的热补丁文件:kpatch_make-bbuildid_online-cchecksumqemu_build.bin-obuildid1.kpatch。带有补丁的二进制文件qemu_build.bin中包含要替换函数的所有信息,在该过程中,kpatch_make遍历这些函数,通过替换函数的checksum(可能有多个-cc1,c2,c3)修改热补丁中间文件中对应字段的值,生成如图6所示的热补丁文件。[0076]可选地,在得到目标版本虚拟机模拟软件的热补丁文件之后,还包括:根据目标版本虚拟机模拟软件的第一编译标识命名目标版本虚拟机模拟软件的热补丁文件。示例性地,针对所有版本的qemu根据步骤s201-s204生成以每个版本buildid1为开头的热补丁文件。[0077]将本发明实施例制作好的所有版本qemu的热补丁文件打包应用到线上所有计算节点即可应用。本发明实施例制作的热补丁文件中带有替换函数的校验码,利用该校验码校验热补丁文件正确性,能够在保持热补丁应用正确性的基础上,实现运行qemu的编译环境与制作热补丁的编译环境解耦,使得qemu热补丁文件能够应用于运行环境中存在多个qemu版本的情况,显著提升qemu热补丁的应用范围以及效率。[0078]根据本发明实施例的第二方面,提供一种采用本发明实施例第一方面的热补丁制作方法制作得到的热补丁文件的应用方法。[0079]图7是本发明实施例的用于虚拟机模拟软件的热补丁应用方法的主要流程的示意图,如图7所示,用于虚拟机模拟软件的热补丁应用方法包括:步骤s701、步骤s702、步骤s703和步骤s704。[0080]步骤s701,根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取该目标版本虚拟机模拟软件的热补丁文件。其中,热补丁文件是采用本发明实施例第一方面提供的热补丁制作方法制作得到的,包括:目标版本虚拟机模拟软件在制作环境下的第二编译标识、待修改函数的替换函数、替换函数的校验信息。[0081]操作系统里每打开一个程序都会创建一个进程id,即pid(processidentification,进程控制符)。qemu进程地址空间中保存qemu二进制文件的buildid1。热补丁文件中保存替换函数的checksum、qemu二进制文件的buildid1以及待修改函数。实际应用过程中,可以先获取qemu进程的pid,然后扫描qemu进程地址空间以获取qemu进程的buildid1,最后根据qemu进程的buildid1寻找对应的热补丁文件。[0082]本步骤中,可以根据当前运行的qemu进程的buildid1生成补丁文件获取请求,以查询和获取对应的热补丁文件。当然,也可以在根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件之前,接收由各个版本的所述虚拟机模拟软件的热补丁文件打包形成的热补丁文件包。根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件,包括:从所述热补丁文件包中获取与所述目标版本虚拟机模拟软件在运行环境下的第一编译标识对应的热补丁文件。[0083]示例性地,每个版本qemu的热补丁文件分别以其对应的buildid1为开头进行命名。所有版本qemu的热补丁文件打包应用到线上所有计算节点之后,每个计算节点先获取其中运行的qemu进程的pid,然后扫描qemu进程地址空间以获取该qemu进程的buildid1,最后从热补丁文件包中寻找以其对应的buildid1命名的热补丁文件。[0084]步骤s702,确定目标版本虚拟机模拟软件的热补丁文件中每个替换函数的校验码。本步骤的具体实现方式与步骤s203类似,此处不再赘述。[0085]步骤s703,判断确定出的替换函数的校验码与热补丁文件中替换函数的校验码是否一致。若是,则跳转至步骤s704,利用热补丁文件中的替换函数替换目标版本虚拟机模拟软件中对应的替换函数;否则流程结束。[0086]图8是本发明可选实施例中热补丁应用的示意图。如图8所示,热补丁应用流程主要包括以下几个部分:[0087]1,qemu进程地址空间中保存qemu二进制的buildid1。[0088]2,热补丁文件中保存替换函数的checksum、qemu二进制文件的buildid1以及待修改函数。[0089]3,通过qemu地址空间内的buildid1来寻找对应的热补丁文件。[0090]4,通过计算替换函数的checksum、并与热补丁文件中的checksum比较,来判断热补丁文件的正确性。[0091]5,checksum验证通过后进行函数替换:在原有的待修改函数开头添加跳转指令,当程序运行到这里时跳转到新的替换函数进行运行。[0092]图9是本发明可选实施例中热补丁应用的主要流程示意图。如图9所示,主要流程包括:[0093]遍历运行中的qemu进程,获取qemu进程的pid。根据qemu进程的pid获取对应的buildid1。判断hotpatch(热补丁文件)列表中是否存在与buildid1匹配。如果hotpatch列表中存在与buildid1匹配的hotpatch,则将匹配到的热补丁文件加载到进程地址空间,根据替换函数地址计算checksum,将计算出的checksum与匹配到的hotpatch中的checksum进行比较。如果相同,则说明替换函数是一致的,进行函数替换;如果不同,说明版本不同,终止当前qemu进程的热补丁过程,遍历下一个qemu进程。如果hotpatch列表中不存在与buildid1匹配的hotpatch,说明版本不同,终止当前qemu进程的热补丁过程,遍历下一个qemu进程。[0094]热补丁文件中的buildid与qemu运行时的buildid相同,只能表明运行的qemu与热补丁文件在相同的代码修改(commitid)下编译生成,不代表能够正确的打上热补丁。若运行qemu的编译环境与生成热补丁的编译环境不相同,容易发生地址偏移,地址偏移后如果不加处理会替换了错误的函数,这种替换函数错误会造成程序崩溃。本发明实施例中通过替换函数的checksum判断热补丁文件是否正确,能够在避免上述问题的基础上,实现运行qemu的编译环境与制作热补丁的编译环境解耦,使得qemu热补丁文件能够应用于运行环境中存在多个qemu版本的情况,显著提升qemu热补丁的应用范围以及效率。[0095]根据本发明实施例的第三方面,提供一种实现本发明实施例第一方面的热补丁制作方法的装置。[0096]图10是本发明实施例的用于虚拟机模拟软件的热补丁制作装置的主要模块的示意图,如图10所示,用于虚拟机模拟软件的热补丁制作装置1000包括:[0097]中间文件制作模块1001,制作目标版本虚拟机模拟软件的热补丁中间文件;所述热补丁中间文件包括:所述目标版本虚拟机模拟软件在制作环境下的第二编译标识、待修改函数的替换函数、替换函数的校验信息;[0098]补丁信息获取模块1002,在所述制作环境下运行所述热补丁中间文件,确定所述替换函数的校验码;根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识;[0099]补丁文件制作模块1003,利用所述第一编译标识替换所述热补丁中间文件中的第二编译标识、利用每个所述替换函数的校验码更新所述热补丁中间文件中的校验信息,得到所述目标版本虚拟机模拟软件的热补丁文件。[0100]可选地,所述补丁信息获取模块确定所述替换函数的校验码,包括:确定所述替换函数预设位置的若干字节的总和校验码,以所述总和校验码作为所述替换函数的校验码。[0101]可选地,所述热补丁制作装置还包括映射关系维护模块,用于:在根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识之前,创建各个版本的虚拟机模拟软件在运行环境下的第一编译标识、在制作环境下的第二编译标识以及提交版本标识之间的映射关系;[0102]所述补丁信息获取模块根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识,包括:从所述映射关系中获取与所述目标版本虚拟机模拟软件的提交版本标识对应的第一编译标识。[0103]可选地,所述补丁文件制作模块还用于:在得到所述目标版本虚拟机模拟软件的热补丁文件之后,根据所述目标版本虚拟机模拟软件的第一编译标识命名所述目标版本虚拟机模拟软件的热补丁文件。[0104]根据本发明实施例的第四方面,提供一种实现本发明实施例第二方面的热补丁应用方法的装置。[0105]图11是本发明实施例的用于虚拟机模拟软件的热补丁制作装置的主要模块的示意图,如图11所示,用于虚拟机模拟软件的热补丁应用装置1100包括:[0106]补丁文件获取模块1101,根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件;所述热补丁文件是采用本发明实施例第一方面提供的热补丁制作方法制作得到的,包括:所述目标版本虚拟机模拟软件在制作环境下的第二编译标识、待修改函数的替换函数、替换函数的校验信息;[0107]补丁文件应用模块1102,确定所述目标版本虚拟机模拟软件的热补丁文件中每个替换函数的校验码;判断确定出的替换函数的校验码与所述热补丁文件中替换函数的校验码是否一致;若是,则利用所述热补丁文件中的替换函数替换所述目标版本虚拟机模拟软件中对应的替换函数。[0108]可选地,所述补丁文件获取模块还用于:在根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件之前,接收由各个版本的所述虚拟机模拟软件的热补丁文件打包形成的热补丁文件包;[0109]所述补丁文件获取模块根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件,包括:从所述热补丁文件包中获取与所述目标版本虚拟机模拟软件在运行环境下的第一编译标识对应的热补丁文件。[0110]根据本发明实施例的第五方面,提供一种用于虚拟机模拟软件的热补丁管理电子设备,包括:[0111]一个或多个处理器;[0112]存储装置,用于存储一个或多个程序,[0113]当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例第一或第二方面提供的方法。[0114]根据本发明实施例的第六方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例第一或第二方面提供的方法。[0115]图12示出了可以应用本发明实施例的用于虚拟机模拟软件的热补丁制作或应用的方法或装置的示例性系统架构1200。[0116]如图12所示,系统架构1200可以包括终端设备1201、1202、1203,网络1204和服务器1205。网络1204用以在终端设备1201、1202、1203和服务器1205之间提供通信链路的介质。网络1204可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。[0117]用户可以使用终端设备1201、1202、1203通过网络1204与服务器1205交互,以接收或发送消息等。终端设备1201、1202、1203上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。[0118]终端设备1201、1202、1203可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。[0119]服务器1205可以是提供各种服务的服务器,例如对用户利用终端设备1201、1202、1203所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息‑‑仅为示例)反馈给终端设备。[0120]需要说明的是,本发明实施例所提供的用于虚拟机模拟软件的热补丁制作方法一般由服务器1205执行,相应地,用于虚拟机模拟软件的热补丁制作装置一般设置于服务器1205中;本发明实施例所提供的用于虚拟机模拟软件的热补丁应用方法一般由终端设备1201、1202、1203执行,相应地,用于虚拟机模拟软件的热补丁应用装置一般设置于终端设备1201、1202、1203中。[0121]应该理解,图12中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。[0122]下面参考图13,其示出了适于用来实现本发明实施例的终端设备的计算机系统1300的结构示意图。图13示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。[0123]如图13所示,计算机系统1300包括中央处理单元(cpu)1301,其可以根据存储在只读存储器(rom)1302中的程序或者从存储部分1308加载到随机访问存储器(ram)1303中的程序而执行各种适当的动作和处理。在ram1303中,还存储有系统1300操作所需的各种程序和数据。cpu1301、rom1302以及ram1303通过总线1304彼此相连。输入/输出(i/o)接口1305也连接至总线1304。[0124]以下部件连接至i/o接口1305:包括键盘、鼠标等的输入部分1306;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分1307;包括硬盘等的存储部分1308;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分1309。通信部分1309经由诸如因特网的网络执行通信处理。驱动器1310也根据需要连接至i/o接口1305。可拆卸介质1311,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1310上,以便于从其上读出的计算机程序根据需要被安装入存储部分1308。[0125]特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1309从网络上被下载和安装,和/或从可拆卸介质1311被安装。在该计算机程序被中央处理单元(cpu)1301执行时,执行本发明的系统中限定的上述功能。[0126]需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。[0127]附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。[0128]描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括中间文件制作模块、补丁信息获取模块、补丁文件制作模块,或者一种处理器包括补丁文件获取模块、补丁文件应用模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,补丁文件制作模块还可以被描述为“制作目标版本虚拟机模拟软件的热补丁中间文件的模块”。[0129]作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:[0130]制作目标版本虚拟机模拟软件的热补丁中间文件;所述热补丁中间文件包括:所述目标版本虚拟机模拟软件在制作环境下的第二编译标识、待修改函数的替换函数、替换函数的校验信息;在所述制作环境下运行所述热补丁中间文件,确定所述替换函数的校验码;根据所述目标版本虚拟机模拟软件的提交版本标识获取所述目标版本虚拟机模拟软件在运行环境下的第一编译标识;利用所述第一编译标识替换所述热补丁中间文件中的第二编译标识、利用每个所述替换函数的校验码更新所述热补丁中间文件中的校验信息,得到所述目标版本虚拟机模拟软件的热补丁文件;或者,[0131]根据目标版本虚拟机模拟软件在运行环境下的第一编译标识获取所述目标版本虚拟机模拟软件的热补丁文件;所述热补丁文件是采用本发明实施例第一方面的热补丁制作方法制作得到的,包括:所述目标版本虚拟机模拟软件在制作环境下的第二编译标识、待修改函数的替换函数、替换函数的校验信息;确定所述目标版本虚拟机模拟软件的热补丁文件中每个替换函数的校验码;判断确定出的替换函数的校验码与所述热补丁文件中替换函数的校验码是否一致;若是,则利用所述热补丁文件中的替换函数替换所述目标版本虚拟机模拟软件中对应的替换函数。[0132]根据本发明实施例的技术方案,通过在热补丁文件中设置替换函数的校验码用于校验热补丁文件正确性,能够在保持热补丁应用正确性的基础上,实现运行qemu的编译环境与制作热补丁的编译环境解耦,使得qemu热补丁文件能够应用于运行环境中存在多个qemu版本的情况,显著提升qemu热补丁的应用范围以及效率。[0133]上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献