CN112822266A - 一种基于内存共享的虚拟机内外通信方法 - Google Patents
一种基于内存共享的虚拟机内外通信方法 Download PDFInfo
- Publication number
- CN112822266A CN112822266A CN202110007550.6A CN202110007550A CN112822266A CN 112822266 A CN112822266 A CN 112822266A CN 202110007550 A CN202110007550 A CN 202110007550A CN 112822266 A CN112822266 A CN 112822266A
- Authority
- CN
- China
- Prior art keywords
- data
- client
- memory
- dynamic library
- write
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000006854 communication Effects 0.000 title claims abstract description 28
- 238000004891 communication Methods 0.000 title claims abstract description 27
- 238000004088 simulation Methods 0.000 claims description 2
- 238000012367 process mapping Methods 0.000 abstract 1
- 244000035744 Hura crepitans Species 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000007175 bidirectional communication Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明涉及一种基于内存共享的虚拟机内外通信方法,包括主机程序由用户层业务程序+注入虚机进程的Dll组成,客户机系统需一个驱动和与驱动通信的用户层程序,客户机里面的用户程序是可选的,在一些特殊场景中可以用驱动独立通信,而不必将数据转发至上层。首先Guest内部程序加载驱动,驱动申请一段连续物理内存并写入约定标识;主机端用户程序分析虚拟机进程的内存布局并获取虚拟机进程映射VM的虚拟内存地址并以页为最小单位搜索约定标识内存区,找到后便可直接读写内存使得主机实现与虚机驱动通信。本发明可作为网络通信之外的主机与客户机之间数据通信的备用手段。
Description
技术领域
本发明涉及一种虚拟机内外通信方法,尤其涉及一种基于内存共享的虚拟机内外通信方法。
背景技术
目前运行于虚拟机内部的程序与主机上的进程主要是通过网络进行通信。这种通信方式在网络畅通及虚拟化平台(Hypervisor)或软件运行虚拟机数量较少的情况下表现良好。不过,一旦出现网络故障或虚拟机启动数量较多时,内外之间的通信将可能不可用,比如VM内部恶意程序阻断网络的行为、VM之间的网络冲突、网络故障、内外通信大量发包阻塞等导致VM失控。
发明内容
本发明的目的在于克服现有技术的缺点,提供了一种基于内存共享的虚拟机内外通信方法,解决了现有技术中存在的问题。
本发明的目的通过以下技术方案来实现:一种基于内存共享的虚拟机内外通信方法,所述内外通信方法包括:
客户机启动内的主程序A启动读写接口与驱动通信,主机程序B启动注入动态库C到客户机进程得到客户机内存地址;
动态库C搜索客户机内驱动申请的内存区,并创建内存共享区与主机程序B共享客户机的数据;
主机程序B写入数据并设置写入事件信号可读后等待动态库C读取完毕,动态库C收到该数据后将其添加至写入客户机的写缓存队列,动态库C中的写操作线程取出待写数据并将数据写入与客户机共享的内存区;
客户机确定数据读入区域可读并读入数据和确定数据写入区域可写并写入数据;
动态库C中的读操作线程读入附加了附加信息的数据至读缓存队列,并从读缓存队列中取出可用数据写入主机内存共享区将其传递给主机程序B;
主机程序B等待写操作事件结束,通过主机内存共享区读入数据并设置读取完毕事件信号通知动态库C。
所述客户机启动内的主程序A启动读写接口与驱动通信,主机程序B启动注入动态库C到客户机进程得到客户机内存地址包括:
客户机启动,驱动加载申请连续物理内存,写入约定标识;
客户机内的程序A启动,通过模拟设备控制接口或者文件读写接口与驱动通信,驱动与主机通过内存交换数据;
主机程序B启动,传入客户机进程的PID;
主机程序B注入动态库C到客户机进程,D11查询进程虚拟内存,饿到客户机内存地址。
所述动态库C搜索客户机内驱动申请的内存区,并创建内存共享区与主机程序B共享客户机的数据包括:
动态库C从客户机内存地址起始处并偏移内存一般大小后以页为单位搜索客户机内驱动申请的内存区;
创建内存共享区与主机程序B共享客户机的数据,通过命名饰件句柄来保证在主机上操作共享资源不会发生多进程、多线程之间的竞争。
所述主机程序B写入数据并设置写入时间信号可读后等待动态库C读取完毕,添加至写入客户机的待写队列,动态库C中的写操作线程取出待写数据并将数据写入与客户机共享的内存区包括:
主机程序B与客户机内的操作通过自定义原子锁来保证操作的互斥性;
主机程序B通过内存共享区写入数据,并设置写入事件信号通知动态库C读取数据;
等待写入事件信号的动态库C中的读取进程结束,收取数据消息并添加写入客户机的待写队列;
动态库C中与客户机交换数据的写操作线程从待写队列中取出待写数据,通过对共享地址进行原子比对交换操作确定可写,则写入附加了附加信息的数据到与客户机共享的内存区。
所述动态库C中的读操作线程读入附加了附加信息的数据至缓存队列,并从缓存队列中取出可用数据写入内存共享区包括:
主机中的虚拟进程中注入的动态库C中与客户机交换数据的读操作线程通过对共享地址进行原子比对交换操作确定可读,则读入附加了附加信息的数据到缓存队列,读取完毕后通过原子比对交换操作将该区域设置为可写状态;
动态库C中与主机程序B交换数据的线程从缓存队列中取出可用数据写入内存共享区,在写入完毕后设置写入完毕信号通知主机程序B。
本发明具有以下优点:一种基于内存共享的虚拟机内外通信方法,一是可作为网络通信之外的主机与客户机之间数据通信的备用手段;二是适用于在主机与客户机在网络通信过程中出现故障、不稳定的情况时,要求客户机仍然绝对可控的场景。比如用于恶意程序动态分析的沙箱,在使用传统的”代理模式”分析时,如果沙箱内部网络被样本阻断,则可能无法将分析结果传递出来,甚至可能因为内外网络中断,导致分析进程被打断。此时其他有别于网络通信的手段就显得比较重要了。
附图说明
图1为虚拟机内外双向通信传输原理图;
图2为本发明的流程示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下结合附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的保护范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。下面结合附图对本发明做进一步的描述。
如图1和图2所示,本发明涉及一种基于内存共享的虚拟机内外通信方法,其在主机上通过注入Dll直接读写虚拟机进程分配给VM的虚拟内存并查找约定标识以确定通信区域首地址,而VM内部的驱动则申请并管理一片连续的“物理内存”并写入约定标识便于主机查找。两者操作的内存区在真正的物理内存视图上属于同一片内存区域,从而实现“内存”共享并交换数据进而实现无网通信。下面内容以Windows+VMware Workstation Pro为例解释说明,实际上该方法同样适用于任何其他形式的虚拟化方案,比如Linux+qemu-kvm、Linux+VMware Workstation、ESXi+VM等。
S1:客户机(VM)启动,驱动加载,申请连续物理内存(页边界对齐),写入约定标识。
S2:客户机内的程序A启动,通过模拟设备控制接口或者文件读写接口与驱动通信,驱动则与主机通过内存交换数据。
S3:主机程序B启动,传入客户机进程的PID。
S4:主机程序B注入动态库C至客户机进程,Dll查询进程虚拟内存,得到客户机内存地址。
S5:动态库C从客户机内存地址起始处并偏移虚拟内存一般大小然后以页为单位搜索客户机内驱动申请的内存区,仅比对页的头部一小段区域。
S6:动态库C注入的动态库创建内存共享区与主机程序B共享客户机的数据,通过命名事件句柄来保证在主机上操作共享资源不会发生多进程、多线程之间的竞争。
S7:主机程序B与客户机内的操作通过自定义原子锁来保证操作互斥性,比如主机端读取数据时,客户机内的驱动在写数据前通过原子操作检查是否可写,不可写便等待。反之读操作亦然。不过,主机与客户机共享区域包括两个紧挨着的区域,对两端而言,一个用于读,一个用于写。
S8:主机程序B通过内存共享区(与注入虚机进程的动态库C共享的区域)写入数据,并设置写入事件信号通知C数据可读。若有其他数据待写入,则在写入前等待动态库C的读取完毕信号再写。
S9:等待写入事件信号的动态库C中的读取进程等待结束,收取数据消息并添加至写入客户机的写缓存队列,该队列由其他线程管理。读取完毕后,设置读取完毕信号通知主机程序B,该线程继续等待其他事件。
S10:动态库C中的与客户机交换数据的写操作线程从读缓存队列中取出待写数据,通过对某共享地址(与客户机共享的地址)进行原子比对交换(atomic compaireexchange)操作确定可写则写入附加了额外信息(如是否是某ID标识的数据分片)的数据至与客户机共享的内存区。写入完毕后,通过原子操作将该区域设置为可读态并禁止写入。该线程继续处理队列数据,下一次可写需要通过原子操作确定该区域为可写态。
S11:客户机驱动通过原子互换比较操作确定数据读入区域可读,若不可读则等待。若可读则读入数据并根据需求处理,如在IRP分发处理过程中,将数据传到上层用户程序。
S12:客户机驱动通过原子比较互换操作确定数据写入区域可写,若不可写则等待。若可写则写入数据(根据需求处理,如在IRP分发处理过程中,数据由上层用户程序传入)。
S13:主机中虚机进程中的注入的动态库C中的与客户机交换数据的读操作线程通过对某共享地址(与客户机共享的地址)进行原子比对交换(atomic compaire exchange)操作确定可读则读入附加了额外信息(如是否是某ID标识的数据分片)的数据至读缓存队列。读取完毕后,通过原子操作将该区域设置为可写态。
S14:动态库C中的与主机程序B交换数据的线程从队列中取出可用数据写入内存共享区(与主机程序B共享的区域)。写入完毕,设置写入完毕信号通知主机程序B。
S15:主机程序B等待写操作事件结束,通过内存共享区读入数据,并设置读取完毕事件信号通知动态库C。
本发明中程序A包括通过DeviceIOControl与客户机驱动通信的简单Demo程序,用于扮演、模拟任何需要与主机通信的客户机程序;主机程序B包括通过共享内存与客户机通信的简单Demo程序,用于扮演、模拟任何需要与客户机通信的主机程序;动态库C包括用于注入到虚拟机进程的动态库,主要用于直接操作虚拟机进程空间(查找虚拟机虚拟内存地址、与主机程序通信等)。
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (5)
1.一种基于内存共享的虚拟机内外通信方法,其特征在于:所述内外通信方法包括:
客户机启动内的主程序A启动读写接口与驱动通信,主机程序B启动注入动态库C到客户机进程得到客户机内存地址;
动态库C搜索客户机内驱动申请的内存区,并创建内存共享区与主机程序B共享客户机的数据;
主机程序B写入数据并设置写入事件信号可读后等待动态库C读取完毕,动态库C收到该数据后将其添加至写入客户机的写缓存队列,动态库C中的写操作线程取出待写数据并将数据写入与客户机共享的内存区;
客户机确定数据读入区域可读并读入数据和确定数据写入区域可写并写入数据;
动态库C中的读操作线程读入附加了附加信息的数据至读缓存队列,并从读缓存队列中取出可用数据写入主机内存共享区将其传递给主机程序B;
主机程序B等待写操作事件结束,通过主机内存共享区读入数据并设置读取完毕事件信号通知动态库C。
2.根据权利要求1所述的一种基于内存共享的虚拟机内外通信方法,其特征在于:所述客户机启动内的主程序A启动读写接口与驱动通信,主机程序B启动注入动态库C到客户机进程得到客户机内存地址包括:
客户机启动,驱动加载申请连续物理内存,写入约定标识;
客户机内的程序A启动,通过模拟设备控制接口或者文件读写接口与驱动通信,驱动与主机通过内存交换数据;
主机程序B启动,传入客户机进程的PID;
主机程序B注入动态库C到客户机进程,D11查询进程虚拟内存,饿到客户机内存地址。
3.根据权利要求2所述的一种基于内存共享的虚拟机内外通信方法,其特征在于:所述动态库C搜索客户机内驱动申请的内存区,并创建内存共享区与主机程序B共享客户机的数据包括:
动态库C从客户机内存地址起始处并偏移内存一般大小后以页为单位搜索客户机内驱动申请的内存区;
创建内存共享区与主机程序B共享客户机的数据,通过命名饰件句柄来保证在主机上操作共享资源不会发生多进程、多线程之间的竞争。
4.根据权利要求3所述的一种基于内存共享的虚拟机内外通信方法,其特征在于:所述主机程序B写入数据并设置写入时间信号可读后等待动态库C读取完毕,添加至写入客户机的待写队列,动态库C中的写操作线程取出待写数据并将数据写入与客户机共享的内存区包括:
主机程序B与客户机内的操作通过自定义原子锁来保证操作的互斥性;
主机程序B通过内存共享区写入数据,并设置写入事件信号通知动态库C读取数据;
等待写入事件信号的动态库C中的读取进程结束,收取数据消息并添加写入客户机的待写队列;
动态库C中与客户机交换数据的写操作线程从待写队列中取出待写数据,通过对共享地址进行原子比对交换操作确定可写,则写入附加了附加信息的数据到与客户机共享的内存区。
5.根据权利要求4所述的一种基于内存共享的虚拟机内外通信方法,其特征在于:所述动态库C中的读操作线程读入附加了附加信息的数据至缓存队列,并从缓存队列中取出可用数据写入内存共享区包括:
主机中的虚拟进程中注入的动态库C中与客户机交换数据的读操作线程通过对共享地址进行原子比对交换操作确定可读,则读入附加了附加信息的数据到缓存队列,读取完毕后通过原子比对交换操作将该区域设置为可写状态;
动态库C中与主机程序B交换数据的线程从缓存队列中取出可用数据写入内存共享区,在写入完毕后设置写入完毕信号通知主机程序B。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110007550.6A CN112822266A (zh) | 2021-01-05 | 2021-01-05 | 一种基于内存共享的虚拟机内外通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110007550.6A CN112822266A (zh) | 2021-01-05 | 2021-01-05 | 一种基于内存共享的虚拟机内外通信方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112822266A true CN112822266A (zh) | 2021-05-18 |
Family
ID=75857425
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110007550.6A Pending CN112822266A (zh) | 2021-01-05 | 2021-01-05 | 一种基于内存共享的虚拟机内外通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112822266A (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662777A (zh) * | 2012-04-28 | 2012-09-12 | 浪潮电子信息产业股份有限公司 | 一种基于kvm虚拟机的客户机之间高速通信的方法 |
US20160314076A1 (en) * | 2007-11-16 | 2016-10-27 | Vmware, Inc. | Vm inter-process communication |
CN106874128A (zh) * | 2017-01-22 | 2017-06-20 | 广州华多网络科技有限公司 | 数据传输方法及装置 |
CN107943596A (zh) * | 2016-10-12 | 2018-04-20 | 阿里巴巴集团控股有限公司 | 进程通信方法、装置及系统 |
CN108243118A (zh) * | 2016-12-27 | 2018-07-03 | 华为技术有限公司 | 转发报文的方法和物理主机 |
CN108595244A (zh) * | 2017-12-05 | 2018-09-28 | 北京神州绿盟信息安全科技股份有限公司 | 虚拟机内外通信方法、虚拟机、物理主机及虚拟机系统 |
CN109857517A (zh) * | 2019-01-04 | 2019-06-07 | 中国科学院计算技术研究所 | 一种虚拟化系统及其数据交换方法 |
CN110402568A (zh) * | 2018-02-24 | 2019-11-01 | 华为技术有限公司 | 一种通信的方法及装置 |
CN111679921A (zh) * | 2020-06-09 | 2020-09-18 | Oppo广东移动通信有限公司 | 内存共享方法、内存共享装置及终端设备 |
CN111813584A (zh) * | 2020-08-05 | 2020-10-23 | Oppo广东移动通信有限公司 | 内存共享方法、装置、电子设备及存储介质 |
-
2021
- 2021-01-05 CN CN202110007550.6A patent/CN112822266A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160314076A1 (en) * | 2007-11-16 | 2016-10-27 | Vmware, Inc. | Vm inter-process communication |
CN102662777A (zh) * | 2012-04-28 | 2012-09-12 | 浪潮电子信息产业股份有限公司 | 一种基于kvm虚拟机的客户机之间高速通信的方法 |
CN107943596A (zh) * | 2016-10-12 | 2018-04-20 | 阿里巴巴集团控股有限公司 | 进程通信方法、装置及系统 |
CN108243118A (zh) * | 2016-12-27 | 2018-07-03 | 华为技术有限公司 | 转发报文的方法和物理主机 |
CN106874128A (zh) * | 2017-01-22 | 2017-06-20 | 广州华多网络科技有限公司 | 数据传输方法及装置 |
CN108595244A (zh) * | 2017-12-05 | 2018-09-28 | 北京神州绿盟信息安全科技股份有限公司 | 虚拟机内外通信方法、虚拟机、物理主机及虚拟机系统 |
CN110402568A (zh) * | 2018-02-24 | 2019-11-01 | 华为技术有限公司 | 一种通信的方法及装置 |
CN109857517A (zh) * | 2019-01-04 | 2019-06-07 | 中国科学院计算技术研究所 | 一种虚拟化系统及其数据交换方法 |
CN111679921A (zh) * | 2020-06-09 | 2020-09-18 | Oppo广东移动通信有限公司 | 内存共享方法、内存共享装置及终端设备 |
CN111813584A (zh) * | 2020-08-05 | 2020-10-23 | Oppo广东移动通信有限公司 | 内存共享方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8972991B2 (en) | Systems and methods for exposing processor topology for virtual machines | |
US9043493B2 (en) | Workload migration between virtualization softwares | |
US8321878B2 (en) | Virtualized storage assignment method | |
TWI506445B (zh) | 用於虛擬作業系統的直接記憶體存取篩選器的電腦系統、方法及電腦可讀取儲存媒體 | |
JP5798485B2 (ja) | 実行中における物理的ハードウェアのエミュレーションとの交換 | |
US20180060103A1 (en) | Guest code emulation by virtual machine function | |
US9069487B2 (en) | Virtualizing storage for WPAR clients using key authentication | |
CN100489782C (zh) | 一种虚拟机系统及硬件设备的访问控制方法 | |
WO2022002106A1 (zh) | 中断处理方法、中断管理器、电子设备、计算机可读存储介质 | |
CN111736945B (zh) | 基于智能网卡的虚拟机热迁移方法、装置、设备及介质 | |
US10430221B2 (en) | Post-copy virtual machine migration with assigned devices | |
US20180060245A1 (en) | Hypervisor translation bypass by host iommu with virtual machine migration support | |
CN115988218B (zh) | 一种虚拟化视频编解码系统、电子设备和存储介质 | |
CN101387989A (zh) | 构建基于分区管理的虚拟存储设备的计算机系统及方法 | |
CN104731635A (zh) | 一种虚拟机访问控制方法,及虚拟机访问控制系统 | |
US20170147374A1 (en) | Virtual pci device based hypervisor bypass for vm bridging | |
EP3274896B1 (en) | Configuration of a memory controller for copy-on-write with a resource controller | |
US11474848B2 (en) | Fail-safe post copy migration of virtual machines | |
CN117389694B (zh) | 基于virtio-blk技术提升虚拟存储IO性能的方法 | |
US8001544B2 (en) | Method and storage medium for virtualization of device self-description information using in-transit modification | |
CN112822266A (zh) | 一种基于内存共享的虚拟机内外通信方法 | |
CN115408064A (zh) | 支持内核在线更新的方法、服务器和相关设备 | |
CN103136057A (zh) | 虚拟驱动的交互方法及装置 | |
CN112241308A (zh) | 一种虚拟机标识处理方法、装置及相关设备 | |
CN105511940A (zh) | 一种Xen虚拟化中授权虚拟机访问Xenstore的方法及系统 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210518 |
|
RJ01 | Rejection of invention patent application after publication |