CN116149800B - Kvm虚拟机应用层无代理cdp方法、***及存储介质 - Google Patents
Kvm虚拟机应用层无代理cdp方法、***及存储介质 Download PDFInfo
- Publication number
- CN116149800B CN116149800B CN202310409488.2A CN202310409488A CN116149800B CN 116149800 B CN116149800 B CN 116149800B CN 202310409488 A CN202310409488 A CN 202310409488A CN 116149800 B CN116149800 B CN 116149800B
- Authority
- CN
- China
- Prior art keywords
- function
- address
- libc
- dynamic link
- link library
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种KVM虚拟机应用层无代理CDP方法、***及存储介质,属于计算机数据恢复技术领域。所述方法包括:获取libc.so动态链接库地址和磁盘格式步骤、获取dlopen函数地址步骤、分配dlopen函数调用栈空间和参数字符串空间步骤、调用dlopen函数加载so文件步骤、替换I/O写函数步骤、备份I/O写数据步骤。所述***包括:获取libc.so动态链接库地址和磁盘格式模块、获取dlopen函数地址模块、分配dlopen函数调用栈空间和参数字符串空间模块、调用dlopen函数加载so文件模块、替换I/O写函数模块、备份I/O写数据模块。本发明通过在QEMU应用层对I/O进行捕获,适用于所有格式的磁盘,能够将KVM虚拟机数据恢复到任意时间点,从而实现了连续数据保护,使CDP技术在虚拟化中良好运用。
Description
技术领域
本发明属于数据恢复技术领域,涉及一种KVM虚拟机应用层无代理CDP方法、***及存储介质。
背景技术
近年来,在数字经济全球化的浪潮下,云计算发展迅猛,已经得到各大政府部门和企业的大力支持,云计算技术的基础与核心就是虚拟化,而市场上开源的虚拟化方案有很多种,其中基于内核的虚拟机(Kernel-based Virtual Machine,KVM)是最流行的一种方案。而在数据恢复领域,针对KVM虚拟机数据备份的研究是十分重要的课题。
传统备份技术一般都是采取定时或者手动备份,当数据损坏或者丢失时只能恢复到备份时指定的时间点,而不在该时间点的数据就会存在损坏或者丢失的风险,故连续数据保护技术(continuous data protection,CDP)是针上述风险提出来的一种技术方案,该技术方案一般是通过捕获目标数据的变化,使得当数据发生损坏或者丢失时,可以将数据恢复到任意时间点,提高备份的效率。
目前,针对KVM虚拟机的CDP技术方案分有代理和无代理两种方向。现有有代理技术是通过在虚拟机内部安装代理软件实现I/O截获及存储,从而实现CDP,但是该有代理技术只能针对raw格式磁盘,并且每一台虚拟机都需要手动安装代理软件,一旦代理需要升级,需要重启***,该行为造成的影响是***的开销变大和维护的成本变高。另外,现有无代理技术是在宿主机内核安装一个内核模块,该内核模块能够识别并截获所有虚拟机的I/O,从而实现CDP,但该无代理技术只能针对raw和qcow2格式磁盘,应用范围较小,且一旦出问题将会影响宿主机,安全风险较大。
经研究,KVM虚拟机除了raw和qcow2格式,还有十多种格式的磁盘,而针对广泛格式磁盘的CDP技术几乎没有。因此,提出一种适用磁盘格式广泛且不影响宿主机的KVM虚拟机CDP技术,是当前急需解决的技术问题。
发明内容
本发明为了解决上述背景技术中的技术问题,提供了一种KVM虚拟机应用层无代理CDP方法、***及存储介质。所述技术方案如下:
第一个方面,提供了一种KVM虚拟机应用层无代理CDP方法,包括步骤:
读取proc文件***,获取目标QEMU进程依赖的libc.so动态链接库地址和目标虚拟机的磁盘格式;
通过ELF文件格式和所述libc.so动态链接库地址解析所述libc.so动态链接库,获取dlopen函数地址;
向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入***调用机器码,再调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用;
向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,配置dlopen函数调用栈和dlopen函数参数对应的字符串,再调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用;
通过所述磁盘格式在所述目标QEMU进程的地址空间寻找目标磁盘结构体BlockDriver,再使用so文件的hook函数替换所述目标磁盘结构体BlockDriver的I/O写函数;
通过所述hook函数截获I/O写数据并备份截获的I/O写数据。
在其中一个实施例中,所述通过ELF文件格式和所述libc.so动态链接库地址解析所述libc.so动态链接库,获取dlopen函数地址步骤,包括:
通过ELF文件格式读取libc.so动态链接库,获取所述libc.so动态链接库的ELF头部信息;
解析所述ELF头部信息,获取libc.so动态链接库的节区头部表信息,所述节区头部表存放着所有节区的信息;
解析所述节区头部表信息,获取存放函数地址信息的节区,所述存放函数地址信息的节区包括:dynsym节区、dynstr节区、rela.plt节区和rela.dyn节区;
遍历所述存放函数地址信息的节区,获取dlopen函数地址。
在其中一个实施例中,所述向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入***调用机器码,再调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间步骤,包括:
选取libc.so动态链接库的ELF头部第9至第16字节地址空间作为机器码存放地址;
向所述机器码存放地址填入***调用机器码,所述***调用机器码为syscall指令和、int3指令和nop指令;
调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用。
在其中一个实施例中,所述调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间步骤,还包括:
所述dlopen函数的调用栈空间大小为S,所述S≧8兆字节;
以字节为单位分配dlopen函数参数所需要的字符串空间,不足一内存页按一内存页处理,所述内存页大小为4096字节。
在其中一个实施例中,所述向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,配置dlopen函数调用栈和dlopen函数参数对应的字符串,再调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间步骤,包括:
向libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,所述函数调用机器码为callq *%rax指令、int3指令和nop指令;
在RAX寄存器、RBP寄存器、RSP寄存器、RDI寄存器中依次存放dlopen函数地址、dlopen函数调用栈空间的栈底地址、dlopen函数调用栈空间的栈顶地址、dlopen函数参数对应的字符串空间地址;
调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用。
第二个方面,还提供了一种KVM虚拟机应用层无代理CDP***,所述***包括:
获取libc.so动态链接库地址和磁盘格式模块,用于读取proc文件***,获取目标QEMU进程依赖的libc.so动态链接库地址和目标虚拟机的磁盘格式;
获取dlopen函数地址模块,用于通过ELF文件格式和所述libc.so动态链接库地址解析所述libc.so动态链接库,获取dlopen函数地址;
分配dlopen函数调用栈空间和参数字符串空间模块,用于向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入***调用机器码,再调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用;
调用dlopen函数加载so文件模块,用于向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,配置dlopen函数调用栈和dlopen函数参数对应的字符串,再调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用;
替换I/O写函数模块,用于通过所述磁盘格式在所述目标QEMU进程的地址空间寻找目标磁盘结构体BlockDriver,再使用so文件的hook函数替换所述目标磁盘结构体BlockDriver的I/O写函数;
备份I/O写数据模块,用于通过所述hook函数截获I/O写数据并备份截获的I/O写数据。
在其中一个实施例中,所述获取dlopen函数地址模块,包括:
libc.so动态链接库的ELF头部信息获取单元,用于通过ELF文件格式读取libc.so动态链接库,获取所述libc.so动态链接库的ELF头部信息;
libc.so动态链接库的ELF节区头部表获取单元,用于解析所述ELF头部信息,获取libc.so动态链接库的节区头部表信息,所述节区头部表存放着所有节区的信息;
存放函数地址信息的节区获取单元,用于解析所述节区头部表信息,获取存放函数地址信息的节区,所述存放函数地址信息的节区包括:dynsym节区、dynstr节区、rela.plt节区和rela.dyn节区;
dlopen函数地址获取单元,用于遍历所述存放函数地址信息的节区,获取dlopen函数地址。
在其中一个实施例中,所述分配dlopen函数调用栈空间和参数字符串空间模块,包括:
选取机器码存放地址单元,用于选取libc.so动态链接库的ELF头部第9至第16字节地址空间作为机器码存放地址;
填入***调用机器码单元,用于向所述机器码存放地址填入***调用机器码,所述***调用机器码为syscall指令和、int3指令和nop指令;
调用sys_mmap***调用单元,用于调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用。
在其中一个实施例中,所述调用dlopen函数加载so文件模块,包括:
填入函数调用机器码单元,用于向libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,所述函数调用机器码为callq *%rax指令、int3指令和nop指令;
修改寄存器组单元,用于在RAX寄存器、RBP寄存器、RSP寄存器、RDI寄存器中依次存放dlopen函数地址、dlopen函数调用栈空间的栈底地址、dlopen函数调用栈空间的栈顶地址、dlopen函数参数对应的字符串空间地址;
调用dlopen函数单元,用于调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用。
第三个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述KVM虚拟机应用层无代理CDP方法。
本发明的有益效果是:
1.本发明具有普遍性,能够在QEMU应用层进行I/O偏移量转换之前截获I/O,不用考虑磁盘文件格式,所有格式的磁盘文件都可以采用该方法;
2.本发明具有低风险性,在QEMU进程空间加载so文件,备份一旦出现问题只会影响当前QEMU进程,不会涉及宿主机和其他QEMU进程;
3.本发明具有良好运行性,相比于其他备份方法,例如复制和快照,需要暂停虚拟机,该方法使用过程中虚拟机运行情况良好;
4.本发明具有无代理性,不需要在KVM虚拟机内部安装任何代理,实现了无代理CDP;
5.本发明实现了CDP,通过在QEMU应用层截获KVM虚拟机的I/O写请求得到所有I/O写数据,从而实现CDP。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1中KVM虚拟机应用层无代理CDP方法流程示意图。
图2为本发明实施例1中ELF文件格式图。
图3为本发明实施例1中获取dlopen函数地址流程图。
图4为本发明实施例1中***调用寄存器组结构示意图。
图5为本发明实施例1中函数调用寄存器组结构示意图。
图6为本发明实施例1中替换I/O写函数过程示意图。
图7为本发明实施例2中KVM虚拟机应用层无代理CDP***结构示意图。
图8为本发明实施例2中获取dlopen函数地址模块的结构示意图。
图9为本发明实施例2中分配dlopen函数调用栈空间和参数字符串空间模块的结构示意图。
图10为本发明实施例2中调用dlopen函数加载so文件模块的结构示意图。
附图中,各标号所代表的部件列表如下:
1001、获取libc.so动态链接库地址和磁盘格式模块,1002、获取dlopen函数地址模块,1003、分配dlopen函数调用栈空间和参数字符串空间模块,1004、调用dlopen函数加载so文件模块,1005、替换I/O写函数模块,1006、备份I/O写数据模块,10021、libc.so动态链接库的ELF头部信息获取单元,10022、libc.so动态链接库的ELF节区头部表获取单元,10023、存放函数地址信息的节区获取单元,10024、dlopen函数地址获取单元,10031、选取机器码存放地址单元,10032、填入***调用机器码单元,10033、调用sys_mmap***调用单元,10041、填入函数调用机器码单元,10042、修改寄存器组单元,10043、调用dlopen函数单元。
实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供的方法,可应用于KVM虚拟机应用层无代理CDP所示的***架构中。
实施例1
在本实施例中,如图1所示,提供一种KVM虚拟机应用层无代理CDP方法,该方法包括:
步骤S1.读取proc文件***,获取目标QEMU进程依赖的libc.so动态链接库地址和目标虚拟机的磁盘格式。
proc文件***中每一个文件与一个进程对应,通过遍历proc文件***得到所有的QEMU进程,然后依次遍历所有QEMU进程下的maps目录和cmdline文件得到所有的libc.so动态链接库的地址和虚拟机的磁盘文件格式。
步骤S2.通过ELF文件格式和所述libc.so动态链接库地址解析所述libc.so动态链接库,获取dlopen函数地址。
可选的,所述步骤S2,包括:
步骤S21.通过ELF文件格式读取libc.so动态链接库,获取所述libc.so动态链接库的ELF头部信息;
步骤S22.解析所述ELF头部信息,获取libc.so动态链接库的节区头部表信息,所述节区头部表存放着所有节区的信息;
步骤S23.解析所述节区头部表信息,获取存放函数地址信息的节区,所述存放函数地址信息的节区包括:dynsym节区、dynstr节区、rela.plt节区和rela.dyn节区;
步骤S24.遍历所述存放函数地址信息的节区,获取dlopen函数地址。
首先使用ptrace***调用挂起目标QEMU进程,然后使用waitpid***调用等待目标QEMU进程停止。Linux中所有的动态链接库文件都是ELF格式的文件,其中包括libc.so动态链接库,ELF文件格式如图2所示。ELF文件以一片固定大小的头部区域开始,所述头部区域为ELF头部信息,其结构如表1所示,其包含了一些ELF文件的基本信息,如ELF文件幻数数组e_ident、节区头部字符串表偏移量e_shstrndx、节区头部表偏移量e_shoff、节区头部表大小e_shentsize和节区数目e_shnum等。此外,ELF文件除ELF头部信息外的部分都是以节区为单位进行组织,其中每个节区就是一个数组,获取dlopen函数地址的流程如图3所示。
表1 ELF头部信息
Offset | 名称 | 说明 |
0-15 byte | e_ident[EI_NIDENT] | 一个字节数组用来确认文件是否是一个ELF文件 |
16-31 byte | e_type | ELF文件类型,有2和3两个类型 |
32-47 byte | e_machine | 目标主机架构 |
48-79 byte | e_version | ELF文件版本号 |
80-143 byte | er_entry | 入口点虚拟地址 |
144- 207byte | e_phoff | 程序头部表偏移 |
208-271 byte | e_shoff | 节区头部表偏移 |
272-303 byte | e_flag | ELF文件标志 |
304-319 byte | e_ehsize | ELF头部大小 |
320-335 byte | e_phentsize | 程序头部表大小 |
336-351 byte | e_phnum | 程序数目 |
352-367 byte | e_shentsize | 节区头部表大小 |
368-383 byte | e_shnum | 节区数目 |
384-399 byte | e_shstrndx | 节区头部字符串表偏移 |
首先,根据ELF头部信息中的e_shoff字段和e_shstrndx字段得到ELF节区头部表和ELF节区头部字符串表的地址,然后遍历节区头部表,根据节区头部表数组元素的st_name字段在节区头部字符串表中找到存放有函数地址信息的4个节区的地址,包括:dynsym节区、dynstr节区、rela.plt节区和rela.dyn节区。
其次,遍历dynsym节区,根据dynsym节区数组元素的st_name字段在dynstr节区中找到dlopen函数名字(这里为__libc_dlopen_mode),这里设dynsym节区数组目标元素为targetsym。
若targetsym的st_shndx字段内容不为undef,说明dlopen函数定义在本ELF文件中,那么就可以通过targetsym中的st_shndx字段找到dlopen函数定义所在的节区,若所在节区是text节区,那么就可以根据targetsym的st_value字段得到dlopen函数的偏移量。
若targetsym的st_shndx字段内容为undef,说明dlopen函数定义在另一个ELF文件,需要进行重定位操作,该操作需要遍历两个重定位表:rela.plt节区和rela.dyn节区。接下来根据rela.plt节区数组元素和rela.dyn节区数组元素的r_info字段与targetsym所在dynsym节区数组下标进行比较,若相等就可以通过目标rela.plt节区数组元素和目标rela.dyn节区数组元素的r_offset字段得到其他ELF文件中dlopen函数的偏移量。
最后,dlopen函数地址就等于libc.so动态链接库地址加上上述找到的偏移量。
步骤S3.向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入***调用机器码,再调用sys_mmap***调用分配8194千字节的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用。
可选的,所述步骤S3,包括:
步骤S31.选取libc.so动态链接库的ELF头部第9至第16字节地址空间作为机器码存放地址;
步骤S32.向所述机器码存放地址填入***调用机器码,所述***调用机器码为syscall指令和、int3指令和nop指令;
步骤S33.调用sys_mmap***调用分配8194千字节的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用。
还可选的,所述步骤S33,还包括:
S331.所述dlopen函数的调用栈空间大小为S,所述S≧8兆字节字节;
S332.以字节为单位分配dlopen函数参数所需要的字符串空间,不足一内存页按一内存页处理,所述内存页大小为4096字节。
***调用对应的寄存器组结构示意图如图4所示。运行dlopen函数需要申请参数字符串和函数调用栈内存空间,申请内存空间需要调用sys_mmap***调用,而调用sys_mmap***调用需要syscall指令,该指令采取机器码的方式运行,而机器码需要申请一块内空间来运行,故无法直接通过sys_mmap***调用申请内存空间。经研究,ELF文件头部信息前16字节为e_ident字段,本质上是一个数组,存放着表示ELF文件的字符和其他一些与机器无关的信息,经测试,后8字节e_ident[8-15]存放的是无用数据,可以选取该8字节作为机器码存放地址,这里的ELF文件选择libc.so动态链接库。首先,经过备份所述8字节内容后,向其中填入syscall指令和、int3指令和nop指令,具体代码为:[0x0f,0x05,0xcc,0x90,0x90,0x90,0x90,0x90]。其中0x0f和0x05表明这是一个syscall指令,0xcc表明这是一个int3中断指令,0x90表明这是一个nop空指令,nop指令的作用是为了使后续指令按8字节对齐。
接下来依次使用ptrace***调用获取目标QEMU进程的寄存器组内容、重新设置寄存器组内容、继续运行目标QEMU进程和恢复原来的寄存器组内容。其中获取到目标QEMU进程的寄存器组内容后需做备份。其中需要重新设置的寄存器包括:使RIP寄存器指向机器码地址,RAX寄存器指向sys_mmap***调用号,RDI寄存器、RSI寄存器、RDX寄存器、R10寄存器、R8寄存器和R9寄存器分别指向sys_mmap***调用的六个参数。其中使用ptrace***调用继续运行目标QEMU进程是为了执行RIP寄存器指向的***调用机器码,从而调用sys_mmap***调用申请dlopen函数所需要的参数字符串空间和调用栈空间。其中恢复原来的寄存器组内容是指在得到***调用返回值之后将上述备份的寄存器组内容恢复。
Linux下默认的函数调用栈空间大小为8兆,故dlopen函数调用栈空间最少为8兆。dlopen函数参数字符串以字节为单位,但sys_mmap***调用以内存页大小4096字节为单位分配,故若参数字符串大小不足一内存页按一内存页大小处理。
步骤S4.向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,配置dlopen函数调用栈和dlopen函数参数对应的字符串,再调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用。
可选的,所述步骤S4,包括:
步骤S41.向libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,所述函数调用机器码为callq *%rax指令、int3指令和nop指令;
步骤S42.在RAX寄存器、RBP寄存器、RSP寄存器、RDI寄存器中依次存放dlopen函数地址、dlopen函数调用栈空间的栈底地址、dlopen函数调用栈空间的栈顶地址、dlopen函数参数对应的字符串空间地址;
步骤S43.调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用。
函数调用对应的寄存器组结构示意图如图5所示。首先向libc.so动态链接库头部的e_ident[8-15]内容处填入callq *%rax指令、int3指令和nop指令,具体代码为:[0xff,0xd0,0xcc,0x90,0x90,0x90,0x90,0x90]。其中0xff和0xd0表明这是一个callq *%rax指令,0xcc表明这是一个int3中断指令,0x90表明这是一个nop空指令,nop指令的作用是为了使后续指令按8字节对齐。
接下来依次使用ptrace***调用获取目标QEMU进程的寄存器组内容、重新设置寄存器组内容、继续运行目标QEMU进程和恢复原来的寄存器组内容.其中获取到目标QEMU进程的寄存器组内容后需做备份。其中需要重新设置的寄存器包括:使RIP寄存器指向机器码地址,RBP寄存器指向调用栈栈底,RSP寄存器指向调用栈栈顶,其中RSP寄存器需要以16字节为单位对齐,RAX寄存器指向dlopen函数地址,RDI寄存器和RSI寄存器分别指向dlopen函数的两个参数,所述两个参数使用分配的参数字符串空间。其中使用ptrace***调用继续运行目标QEMU进程是为了执行RIP寄存器指向的函数调用机器码,从而调用dlopen函数加载so文件到目标QEMU进程地址空间。其中恢复原来的寄存器组内容是在得到函数返回值之后将上述备份的寄存器组内容恢复。到此加载so文件结束,但还需要将备份的libc.so动态链接库e_ident[8-15]内容恢复。
步骤S5.通过所述磁盘格式在所述目标QEMU进程的地址空间寻找目标磁盘结构体BlockDriver,再使用so文件的hook函数替换所述目标磁盘结构体BlockDriver的I/O写函数。
KVM虚拟机磁盘的格式有很多种,每一种格式的磁盘在QEMU内部被封装为一个磁盘结构体BlockDriver,比如raw格式对应的BlockDriver结构体变量为bdrv_raw,所有对该磁盘的操作都可以通过调用对应BlockDriver结构体变量内部的函数来实现,故可以通过使用so文件的hook函数替换掉对应BlockDriver结构体变量的写函数来截获所有的写I/O。其中,所述写函数有三个:bdrv_write、bdrv_co_writev和bdrv_aio_writev。通常某种格式的磁盘只会使用一个写函数,比如raw格式的磁盘文件使用bdrv_co_writev,vmdk格式的磁盘文件使用bdrv_write,rbd格式的磁盘使用bdrv_aio_writev。该步骤示意图如图6所示。这一步骤涉及的函数寻址与dlopen函数寻址方式一模一样,不做赘述,唯一不同的是如何在QEMU进程地址空间查找对应BlockDriver结构体变量地址。首先,通过ELF文件格式在QEMU可执行程序中找到data节区和rodata节区的地址,所述QEMU可执行程序在x86架构下为qemu-system-x86_64。然后,遍历data节区,将目标BlockDriver结构体变量的format_name字段与rodata节区中的磁盘格式字符串进行比较在data节区找到目标BlockDriver结构体变量地址。最后,在依次找到目标BlockDriver结构体变量地址、so文件hook函数地址和so文件旧函数指针地址后,首先使用so文件旧函数指针指向目标BlockDriver结构体变量中的写函数,然后将目标BlockDriver结构体变量中的写函数指针指向so文件hook函数。
步骤S6.通过所述hook函数截获I/O写数据并备份截获的I/O写数据。
在hook函数中将I/O写数据拷贝一份发送到备份服务器后通过旧函数指针调用原写函数返回原I/O处理过程,以此达到连续数据保护的作用。
本实施例的技术方案,通过在应用层注入so文件的方式实现CDP,安全风险只涉及目标QEMU进程,不会影响宿主机,具有低风险性;通过找到目标格式磁盘对应的BlockDriver结构体变量,实现了所有类型磁盘的I/O截获,具有普遍性。
实施例2
在本实施例中,如图7所示,提供了一种KVM虚拟机应用层无代理CDP***,该***包括:
获取libc.so动态链接库地址和磁盘格式模块1001,用于读取proc文件***,获取目标QEMU进程依赖的libc.so动态链接库地址和目标虚拟机的磁盘格式;
获取dlopen函数地址模块1002,用于通过ELF文件格式和所述libc.so动态链接库地址解析所述libc.so动态链接库,获取dlopen函数地址;
分配dlopen函数调用栈空间和参数字符串空间模块1003,用于向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入***调用机器码,再调用sys_mmap***调用分配8194千字节的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用;
调用dlopen函数加载so文件模块1004,用于向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,配置dlopen函数调用栈和dlopen函数参数对应的字符串,再调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用;
替换I/O写函数模块1005,用于通过所述磁盘格式在所述目标QEMU进程的地址空间寻找目标磁盘结构体BlockDriver,再使用so文件的hook函数替换所述目标磁盘结构体BlockDriver的I/O写函数;
备份I/O写数据模块1006,用于通过所述hook函数截获I/O写数据并备份截获的I/O写数据。
可选的,如图8所示,所述获取dlopen函数地址模块1002,包括:
libc.so动态链接库的ELF头部信息获取单元10021,用于通过ELF文件格式读取libc.so动态链接库,获取所述libc.so动态链接库的ELF头部信息;
libc.so动态链接库的ELF节区头部表获取单元10022,用于解析所述ELF头部信息,获取libc.so动态链接库的节区头部表信息,所述节区头部表存放着所有节区的信息;
存放函数地址信息的节区获取单元10023,用于解析所述节区头部表信息,获取存放函数地址信息的节区,所述存放函数地址信息的节区包括:dynsym节区、dynstr节区、rela.plt节区和rela.dyn节区;
dlopen函数地址获取单元10024,用于遍历所述存放函数地址信息的节区,获取dlopen函数地址。
可选的,如图9所示,所述分配dlopen函数调用栈空间和参数字符串空间模块1003,包括:
选取机器码存放地址单元10031,用于选取libc.so动态链接库的ELF头部第9至第16字节地址空间作为机器码存放地址;
填入***调用机器码单元10032,用于向所述机器码存放地址填入***调用机器码,所述***调用机器码为syscall指令和、int3指令和nop指令;
调用sys_mmap***调用单元10033,用于调用sys_mmap***调用分配8194千字节的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用。
可选的,如图10所示,所述调用dlopen函数加载so文件模块1004,包括:
填入函数调用机器码单元10041,用于向libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,所述函数调用机器码为callq *%rax指令、int3指令和nop指令;
修改寄存器组单元10042,用于在RAX寄存器、RBP寄存器、RSP寄存器、RDI寄存器中依次存放dlopen函数地址、dlopen函数调用栈空间的栈底地址、dlopen函数调用栈空间的栈顶地址、dlopen函数参数对应的字符串空间地址;
调用dlopen函数单元10043,用于调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用。
为了验证该实施例的正确性,设计了一组实验,具体如下:
实验环境由一台本地测试服务器和一台远程备份服务器组成,本地服务器运行了7台KVM虚拟机,分别为raw格式、qcow2格式、vdi格式、vmdk格式、vpc格式、sheepdog格式和rbd格式的磁盘,7种磁盘格式的特点如下:raw是最基本的磁盘格式,qcow2是QEMU独有的磁盘格式,vdi是VirtualBox虚拟机磁盘格式,vmdk是VMware虚拟机磁盘格式,sheepdog是sheepdog分布式存储***磁盘格式,vpc是Microsoft 的Virtual PC的磁盘文件格式,rbd是ceph分布式存储***磁盘格式。上述7台虚拟机概括了所有类型磁盘的特点,使实验具有普遍性。在CDP***开启之前,设当下时间点为Tb,首先对7台虚拟机磁盘文件进行一次SHA1哈希值计算,保存计算结果。在CDP***运行一段时间后恢复到Tb,再对7台虚拟机磁盘文件进行一次SHA1哈希值计算,保存计算结果。实验结果如表2所示。
表2 实验结果
虚拟机类型 | 备份前SHA1校验值 | 恢复后SHA1校验值 |
raw | a8cbadd0f15cde5a137de50c7e93d12eab9b9cea | a8cbadd0f15cde5a137de50c7e93d12eab9b9cea |
qcow2 | c672ad6c088c5e04b686b7e360284e184b9602b6 | c672ad6c088c5e04b686b7e360284e184b9602b6 |
vdi | 46e93af069e6a8f40967d184bbdc84c0dd89db34 | 46e93af069e6a8f40967d184bbdc84c0dd89db34 |
vmdk | be2d4226251374053a4ebe67a8dd08bffe54d95b | be2d4226251374053a4ebe67a8dd08bffe54d95b |
vpc | 43b605650658ca723e8242477817a9945434f467 | 43b605650658ca723e8242477817a9945434f467 |
sheepdog | 6fb98799b505c00f160d510cebb2df231b25013 | 6fb98799b505c00f160d510cebb2df231b25013 |
rbd | b172130701992aa6df5d7bff34f5b0d7a761f24b | b172130701992aa6df5d7bff34f5b0d7a761f24b |
实验结果表明,7台虚拟机两次SHA1哈希值计算结果都相同,说明本实施例的KVM虚拟机应用层无代理CDP***能够正确实现所有类型KVM虚拟机的无代理实时备份。
本实施例的技术方案,获取libc.so动态链接库地址和磁盘格式模块1001,用于读取proc文件***,获取目标QEMU进程依赖的libc.so动态链接库地址和目标虚拟机的磁盘格式;获取dlopen函数地址模块1002,用于通过ELF文件格式和所述libc.so动态链接库地址解析所述libc.so动态链接库,获取dlopen函数地址;分配dlopen函数调用栈空间和参数字符串空间模块1003,用于向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入***调用机器码,再调用sys_mmap***调用分配物理内存映射到所述目标QEMU进程的地址空间;调用dlopen函数加载so文件模块1004,用于向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,配置dlopen函数调用栈和dlopen函数参数对应的字符串,再调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间;替换I/O写函数模块1005,用于通过所述磁盘格式在所述目标QEMU进程的地址空间寻找目标磁盘结构体BlockDriver,再使用so文件的hook函数替换所述目标磁盘结构体BlockDriver的I/O写函数;备份I/O写数据模块1006,用于通过所述hook函数截获I/O写数据并备份截获的I/O写数据。本实施例的技术方案,不需要在KVM虚拟机内部安装任何代理,实现了无代理CDP。
实施例3
在本实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现实施例1所述KVM应用层无代理CDP方法。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质包括但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种KVM虚拟机应用层无代理CDP方法,其特征在于,所述方法包括步骤:
读取proc文件***,获取目标QEMU进程依赖的libc.so动态链接库地址和目标虚拟机的磁盘格式;
通过ELF文件格式和所述libc.so动态链接库地址解析所述libc.so动态链接库,获取dlopen函数地址;
向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入***调用机器码,再调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用;
向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,配置dlopen函数调用栈和dlopen函数参数对应的字符串,再调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用;
通过所述磁盘格式在所述目标QEMU进程的地址空间寻找目标磁盘结构体BlockDriver,再使用so文件的hook函数替换所述目标磁盘结构体BlockDriver的I/O写函数;
通过所述hook函数截获I/O写数据并备份截获的I/O写数据。
2.根据权利要求1所述的KVM虚拟机应用层无代理CDP方法,其特征在于,所述通过ELF文件格式和所述libc.so动态链接库地址解析所述libc.so动态链接库,获取dlopen函数地址步骤,包括:
通过ELF文件格式读取libc.so动态链接库,获取所述libc.so动态链接库的ELF头部信息;
解析所述ELF头部信息,获取libc.so动态链接库的节区头部表信息,所述节区头部表存放着所有节区的信息;
解析所述节区头部表信息,获取存放函数地址信息的节区,所述存放函数地址信息的节区包括:dynsym节区、dynstr节区、rela.pl节区和rela.dyn节区;
遍历所述存放函数地址信息的节区,获取dlopen函数地址。
3.根据权利要求1所述的KVM虚拟机应用层无代理CDP方法,其特征在于,所述向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入***调用机器码,再调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间步骤,包括:
选取libc.so动态链接库的ELF头部第9至第16字节地址空间作为机器码存放地址;
向所述机器码存放地址填入***调用机器码,所述***调用机器码为syscall指令和、int3指令和nop指令;
调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用。
4.根据权利要求3所述的KVM虚拟机应用层无代理CDP方法,其特征在于,所述调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间步骤,还包括:
所述dlopen函数的调用栈空间大小为S,所述S≧8兆字节;
以字节为单位分配dlopen函数参数所需要的字符串空间,不足一内存页按一内存页处理,所述内存页大小为4096字节。
5.根据权利要求1所述的KVM虚拟机应用层无代理CDP方法,其特征在于,所述向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,配置dlopen函数调用栈和dlopen函数参数对应的字符串,再调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间步骤,包括:
向libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,所述函数调用机器码为callq *%rax指令、int3指令和nop指令;
在RAX寄存器、RBP寄存器、RSP寄存器、RDI寄存器中依次存放dlopen函数地址、dlopen函数调用栈空间的栈底地址、dlopen函数调用栈空间的栈顶地址、dlopen函数参数对应的字符串空间地址;
调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用。
6.一种KVM虚拟机应用层无代理CDP***,其特征在于,所述***包括:
获取libc.so动态链接库地址和磁盘格式模块,用于读取proc文件***,获取目标QEMU进程依赖的libc.so动态链接库地址和目标虚拟机的磁盘格式;
获取dlopen函数地址模块,用于通过ELF文件格式和所述libc.so动态链接库地址解析所述libc.so动态链接库,获取dlopen函数地址;
分配dlopen函数调用栈空间和参数字符串空间模块,用于向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入***调用机器码,再调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用;
调用dlopen函数加载so文件模块,用于向所述libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,配置dlopen函数调用栈和dlopen函数参数对应的字符串,再调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用;
替换I/O写函数模块,用于通过所述磁盘格式在所述目标QEMU进程的地址空间寻找目标磁盘结构体BlockDriver,再使用so文件的hook函数替换所述目标磁盘结构体BlockDriver的I/O写函数;
备份I/O写数据模块,用于通过所述hook函数截获I/O写数据并备份截获的I/O写数据。
7.根据权利要求6所述的KVM虚拟机应用层无代理CDP***,其特征在于,获取dlopen函数地址模块,包括:
libc.so动态链接库的ELF头部信息获取单元,用于通过ELF文件格式读取libc.so动态链接库,获取所述libc.so动态链接库的ELF头部信息;
libc.so动态链接库的ELF节区头部表获取单元,用于解析所述ELF头部信息,获取libc.so动态链接库的节区头部表信息,所述节区头部表存放着所有节区的信息;
存放函数地址信息的节区获取单元,用于解析所述节区头部表信息,获取存放函数地址信息的节区,所述存放函数地址信息的节区包括:dynsym节区、dynstr节区、rela.plt节区和rela.dyn节区;
dlopen函数地址获取单元,用于遍历所述存放函数地址信息的节区,获取dlopen函数地址。
8.根据权利要求6所述的KVM虚拟机应用层无代理CDP***,其特征在于,分配dlopen函数调用栈空间和参数字符串空间模块,包括:
选取机器码存放地址单元,用于选取libc.so动态链接库的ELF头部第9至第16字节地址空间作为机器码存放地址;
填入***调用机器码单元,用于向所述机器码存放地址填入***调用机器码,所述***调用机器码为syscall指令和、int3指令和nop指令;
调用sys_mmap***调用单元,用于调用sys_mmap***调用分配预定大小的物理内存映射到所述目标QEMU进程的地址空间,其中所述物理内存是dlopen函数的调用栈空间和dlopen函数参数所需要的字符串空间,其中所述sys_mmap***调用通过所述***调用机器码进行调用。
9.根据权利要求6所述的KVM虚拟机应用层无代理CDP***,其特征在于,调用dlopen函数加载so文件模块,包括:
填入函数调用机器码单元,用于向libc.so动态链接库的ELF头部第9至第16字节地址空间填入函数调用机器码,所述函数调用机器码为callq *%rax指令、int3指令和nop指令;
修改寄存器组单元,用于在RAX寄存器、RBP寄存器、RSP寄存器、RDI寄存器中依次存放dlopen函数地址、dlopen函数调用栈空间的栈底地址、dlopen函数调用栈空间的栈顶地址、dlopen函数参数对应的字符串空间地址;
调用dlopen函数单元,用于调用dlopen函数将so文件加载到所述目标QEMU进程的地址空间,其中所述dlopen函数通过所述函数调用机器码进行调用。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至5任一所述KVM虚拟机应用层无代理CDP方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310409488.2A CN116149800B (zh) | 2023-04-18 | 2023-04-18 | Kvm虚拟机应用层无代理cdp方法、***及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310409488.2A CN116149800B (zh) | 2023-04-18 | 2023-04-18 | Kvm虚拟机应用层无代理cdp方法、***及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116149800A CN116149800A (zh) | 2023-05-23 |
CN116149800B true CN116149800B (zh) | 2023-06-23 |
Family
ID=86360349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310409488.2A Active CN116149800B (zh) | 2023-04-18 | 2023-04-18 | Kvm虚拟机应用层无代理cdp方法、***及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116149800B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116401020B (zh) * | 2023-06-07 | 2023-08-11 | 四川大学 | Kvm虚拟机i/o过滤框架实现方法、***及存储介质 |
CN117851133B (zh) * | 2024-03-07 | 2024-05-17 | 成都云祺科技有限公司 | Xen半虚拟化的无代理实时备份方法、***及恢复方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110032477A (zh) * | 2019-04-17 | 2019-07-19 | 深信服科技股份有限公司 | 一种恢复持续数据保护的方法、***及相关组件 |
CN111427782A (zh) * | 2020-03-24 | 2020-07-17 | 同盾控股有限公司 | 安卓动态链接库的运行方法、装置、设备及存储介质 |
CN111949362A (zh) * | 2019-05-14 | 2020-11-17 | 中国科学院信息工程研究所 | 一种基于虚拟化技术的主机信息采集方法 |
CN112860479A (zh) * | 2016-12-26 | 2021-05-28 | 华为技术有限公司 | 存储数据的方法及云数据中心 |
CN114416431A (zh) * | 2022-03-28 | 2022-04-29 | 成都云祺科技有限公司 | 基于kvm的无代理持续性数据保护方法、***及存储介质 |
WO2022101909A1 (en) * | 2020-11-11 | 2022-05-19 | B. G. Negev Technologies And Applications Ltd., At Ben-Gurion University | Methods and systems for trusted unknown malware detection and classification in linux cloud environments |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10089192B2 (en) * | 2013-06-13 | 2018-10-02 | Hytrust, Inc. | Live restore for a data intelligent storage system |
US10853105B2 (en) * | 2017-09-20 | 2020-12-01 | Citrix Systems, Inc. | Java native interface and Windows Universal app hooking |
-
2023
- 2023-04-18 CN CN202310409488.2A patent/CN116149800B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112860479A (zh) * | 2016-12-26 | 2021-05-28 | 华为技术有限公司 | 存储数据的方法及云数据中心 |
CN110032477A (zh) * | 2019-04-17 | 2019-07-19 | 深信服科技股份有限公司 | 一种恢复持续数据保护的方法、***及相关组件 |
CN111949362A (zh) * | 2019-05-14 | 2020-11-17 | 中国科学院信息工程研究所 | 一种基于虚拟化技术的主机信息采集方法 |
CN111427782A (zh) * | 2020-03-24 | 2020-07-17 | 同盾控股有限公司 | 安卓动态链接库的运行方法、装置、设备及存储介质 |
WO2022101909A1 (en) * | 2020-11-11 | 2022-05-19 | B. G. Negev Technologies And Applications Ltd., At Ben-Gurion University | Methods and systems for trusted unknown malware detection and classification in linux cloud environments |
CN114416431A (zh) * | 2022-03-28 | 2022-04-29 | 成都云祺科技有限公司 | 基于kvm的无代理持续性数据保护方法、***及存储介质 |
Non-Patent Citations (3)
Title |
---|
"Software generated device exception for more intensive device-related software testing: An industrial field study";Jooyoung Seo;《Journal of Systems and Software》;第86卷(第12期);第3193-3212页 * |
"一种易部署的Android应用程序动态监测方案";苏祥;《计算机科学》;第47卷(第02期);第262-268页 * |
"基于KVM的持续性数据保护设计与研究";龙星澧;黄传波;胡晓勤;《现代计算机》;第28卷(第07期);第65-69页 * |
Also Published As
Publication number | Publication date |
---|---|
CN116149800A (zh) | 2023-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116149800B (zh) | Kvm虚拟机应用层无代理cdp方法、***及存储介质 | |
US8271751B2 (en) | Systems and methods for reliably managing files in a computer system | |
CN108701048B (zh) | 数据加载方法及装置 | |
KR101903818B1 (ko) | 가상 디스크 스토리지 기술 | |
US6678883B1 (en) | Apparatus and method for creating a trace file for a trace of a computer program based on loaded module information | |
US6658416B1 (en) | Apparatus and method for creating an indexed database of symbolic data for use with trace data of a computer program | |
US6988263B1 (en) | Apparatus and method for cataloging symbolic data for use in performance analysis of computer programs | |
US6766511B1 (en) | Apparatus and method for performing symbolic resolution of modules using static representations of a trace | |
US8751768B2 (en) | Data storage reclamation systems and methods | |
CN107807839B (zh) | 一种修改虚拟机内存数据的方法、装置及电子设备 | |
US20100125554A1 (en) | Memory Recovery Across Reboots of an Emulated Operating System | |
US8839215B2 (en) | String cache file for optimizing memory usage in a java virtual machine | |
US20180107605A1 (en) | Computing apparatus and method with persistent memory | |
US9558074B2 (en) | Data replica control | |
US6708169B1 (en) | Apparatus and method for generating a merged symbol file for verifying symbolic data | |
US9116621B1 (en) | System and method of transfer of control between memory locations | |
CN110737892B (zh) | 一种针对apc注入的检测方法和相关装置 | |
US10387300B2 (en) | System and method for transferring control of instruction execution between address spaces | |
KR20210057176A (ko) | 함수 점프 구현 방법, 디바이스, 및 컴퓨터 저장 매체 | |
CN111258666A (zh) | 计算机文件的读取方法、装置、计算机***及存储介质 | |
CN110716845A (zh) | 一种Android***的日志信息读取的方法 | |
US20080120480A1 (en) | Method and System For Preserving Critical Storage Contents Across A System Restart | |
CN108197041B (zh) | 一种确定子进程的父进程的方法、设备及其存储介质 | |
US20230409438A1 (en) | Creating file recipes for copy overwrite workloads in deduplication file systems | |
US11048425B2 (en) | Data integrity verification |
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 |