虚拟机内外交互方法、装置、电子设备及存储介质

文档序号:30951718发布日期:2022-07-30 07:54阅读:89来源:国知局
虚拟机内外交互方法、装置、电子设备及存储介质

1.本发明涉及计算机技术领域,尤其涉及一种虚拟机内外交互方法、装置、电子设备及存储介质。


背景技术:

2.虚拟机内外的数据交换,是基于虚拟机的软件分析工具所需要解决的主要问题之一。目前虚拟机内外数据交换主要包括基于共享内存的数据交换方法和基于网络(socket)的数据交换方法。
3.基于共享内存的数据交换方法是一种传统的数据交换方案,目前的vmware虚拟机、virtualbox虚拟机均主要通过共享内存实现数据交换。其方法是在系统中安装驱动程序,通过该驱动程序,将虚拟机的特定内存区域标记为交换区域。当外部需要进行数据交换时,发出相应的请求,将外部数据写入该区域,基于信号实现数据读写。这种方法虽然形成了以vmware为代表的数据交换框架,但其需要针对每种不同的操作系统编写专门的驱动程序,工作复杂并且容易引发系统的不稳定,或与安防软件冲突,经常出现数据传输过程丢失、虚拟机卡死等问题。而基于socket的数据交换是当前应用较广的一种数据传输方式,目前很多基于qemu等虚拟机实现的数据交换基于该原理实现。其思路与木马程序的实现思路类似,在虚拟机中编写一个简化的远程被控端程序,在虚拟机之外使用另一个控制端程序与之通信,两者基于虚拟机和外部主机的socket实现通信。由于虚拟机自身模拟的问题,socket往往不稳定,在断开后由于网络协议超时等机制的影响,即使检测到断开,也无法实现快速连接恢复。因而很难基于网络实现虚拟机内外的稳定快速数据交换。
4.由此可见,不管是基于内存映射,还是基于网络的数据交换方法,均存在工作量大,数据连接和传输过程难以保证效率和稳定性,可扩展能力差,难以实现敏捷、稳定可扩展的数据交换的缺陷,因而难以满足稳定可靠的虚拟机内外数据交换的需求。


技术实现要素:

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.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
39.图1为本发明一实施例提供的虚拟机内外交互方法的流程图;
40.图2为本发明一实施例提供的虚拟机内外交互方法的原理示意图;
41.图3为本发明一实施例提供的虚拟机内部程序发起数据发送请求的过程示意图;
42.图4为本发明一实施例提供的虚拟机外部程序发起数据发送请求的过程示意图;
43.图5为本发明一实施例提供的虚拟机内外交互装置的结构示意图;
44.图6为本发明一实施例提供的电子设备的结构示意图。
具体实施方式
45.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
46.需要说明的是,本发明实施例针对当前虚拟机内部与虚拟机外部通信方式有限,需要对每个监控的操作系统逐一编写交互驱动,通信接口不稳定,虚拟机内外数据交换困难的问题,通过在虚拟机硬件模拟方法中添加新的通信硬件,并实现相应的虚拟机硬件的通信方法,达到利用通信硬件实现虚拟机内外数据交互的目的。基于该技术实现了一套数据交互接口,研发相应的通信模块,实现虚拟机与外部主机程序之间的稳定、可靠数据交互。极大地提高了基于虚拟化的程序分析系统的数据传输稳定性和可靠性。下面将通过具体实施例对本发明提供的方案进行详细解释和说明。
47.图1示出了本发明实施例提供的虚拟机内外交互方法的流程图。如图1所示,本发明实施例提供的虚拟机内外交互方法包括如下步骤:
48.在虚拟机内部通过硬件虚拟化方式生成串口模拟设备;
49.在虚拟机外部通过硬件虚拟化方式生成模拟管道;
50.基于所述串口模拟设备和所述模拟管道进行虚拟机内部程序和虚拟机外部程序的数据交互。
51.在本实施例中,需要说明的是,针对现有数据交换技术基于内存映射或网络实现,需要对每个监控的操作系统逐一编写交互驱动,且稳定性较差,难以实现可扩展、稳定的数据交互问题,本实施例提供了一种基于虚拟化硬件的数据交换方法,该方法通过直接修改虚拟机程序,在虚拟机上模拟通用串口,在虚拟机外部模拟管道,使得内部和外部程序都能够通过通用接口实现数据交换。
52.在本实施例中,在虚拟机内部,通过硬件虚拟化技术模拟串口设备,在虚拟机外部,通过与虚拟机的模拟串口设备连接输入、输出数据,从而实现快速稳定的数据传输。
53.可以理解的是,本实施例所描述在虚拟机内部模拟串口设备,可以采用的方式是修改虚拟机的串口模拟代码,在虚拟机模拟硬件中增加一个串口设备,例如主要修改的内容可以包括:串口的输入、输出硬件缓冲,串口的状态寄存器,串口数据传输的字长、波特率、奇偶校验位、数据控制位等相关设置。此外,可以理解的是,本实施例修改了虚拟机的串口状态寄存器,在单个数据传输过程中,可以使用模拟的字长、波特率、奇偶校验位和数据控制位等信息,虚拟机内部的主机使用该配置对串口进行设置时,虚拟机可辨别该串口为数据通信串口。本实施例通过缓冲区实现数据传输,在串口进行传输时,当未接收到通信协议中的数据分片结束标记时,保持数据接收状态,不断接收新的数据。当检测到数据分片结束标记时,修改串口寄存器的状态,标记串口中有数据待接收,由虚拟机内部通信程序进行读写。
54.在本实施例中,在虚拟机外部通过硬件虚拟化方式生成模拟管道时,可以采用的方式是利用操作系统提供的管道创建功能,如linux系统中的pipe()函数,构建一个虚拟管道,然后使用操作系统定义的接口,设定虚拟管道使用的缓冲区、管道数据通知信息、数据收发的回调函数等功能,进而使得基于串口模拟设备和模拟管道能够进行虚拟机内部程序和虚拟机外部程序的数据交互。
55.由上面技术方案可知,本发明实施例提供的虚拟机内外交互方法,在虚拟机内部通过硬件虚拟化方式生成串口模拟设备,在虚拟机外部通过硬件虚拟化方式生成模拟管道,然后基于所述串口模拟设备和所述模拟管道进行虚拟机内部程序和虚拟机外部程序的数据交互。由此可见,本发明实施例通过直接修改虚拟机程序,在虚拟机上模拟通用串口,在虚拟机外部模拟管道,使得内部和外部程序都能够通过通用接口实现数据交换,由此可见,本发明实施例基于模拟通用硬件实现,无需程序开发人员重新修改内外交互程序代码,不影响操作系统的完整性和稳定性,能够实现稳定、可靠且快速的数据传输,从而能够为虚拟机内外数据交换提供良好支撑。
56.基于上述实施例的内容,在本实施例中,在虚拟机内部通过硬件虚拟化方式生成串口模拟设备,具体包括:在虚拟机内部通过硬件虚拟化方式生成通用串口、通用串口的接收状态寄存器、通用串口的发送状态寄存器以及输出缓冲区。
57.在虚拟机外部通过硬件虚拟化方式生成模拟管道,具体包括:在虚拟机外部通过硬件虚拟化方式生成输入模拟管道、输出模拟管道和输入缓冲区。
58.在本实施例中,虚拟串口的输入缓冲区和输出缓冲区相互独立,在实现双工通信的同时,可以避免串口的输入和输出相互干扰。
59.在本实施例中,将输入管道和输出管道分开,两个管道不会被共用,避免管道传入传出数据之间相互干扰。
60.在本实施例中,模拟了接收状态寄存器和发送状态寄存器。在具体进行数据通信的过程中,可以修改虚拟机的串口状态寄存器的状态进而实现数据传输的控制。在单个数据传输过程中,使用模拟的字长、波特率、奇偶校验位和数据控制位等信息,虚拟机内部的主机使用该配置对串口进行设置时,虚拟机可辨别该串口为数据通信串口。
61.此外,本实施例通过缓冲区实现数据传输,在串口进行传输时,当未接收到通信协议中的数据分片结束标记时,保持数据接收状态,不断接收新的数据。当检测到数据分片结束标记时,修改串口寄存器的状态,标记串口中有数据待接收,由虚拟机内部通信程序进行读写。
62.基于上述实施例的内容,在本实施例中,基于所述串口模拟设备和所述模拟管道进行虚拟机内部程序和虚拟机外部程序的数据交互,具体包括:
63.当虚拟机内部程序向虚拟机外部程序发送第一数据时,基于所述通用串口以及所述发送状态寄存器将所述第一数据发送至所述输出缓冲区,并在所述输出缓冲区中进行数据校验,若校验通过,则修改所述输出模拟管道的管道状态,以由所述虚拟机外部程序接收所述第一数据;
64.和/或,
65.当虚拟机外部程序向虚拟机内部程序发送第二数据时,基于所述输入模拟管道将所述第二数据发送至所述输入缓冲区,并在所述输入缓冲区中进行数据校验,若校验通过,
则修改所述接收状态寄存器的状态,以由所述虚拟机内部程序接收所述第二数据。
66.在本实施例中,在缓冲区接收数据并校验完成后,主动改变状态寄存器,通知虚拟机内部通信程序,由内部通信程序实现程序收发。在本实施例中,在虚拟机内部模拟的串口,其串口寄存器和收发缓冲区与物理硬件不同。串口寄存器并不表示当前串口的硬件实时状态,表示的是串口收发缓冲区的数据传送状态,其方法与现有串口模拟方法不同。
67.在本实施例中,在串口中模拟的收发缓冲区,具有数据长度匹配、校验和计算、结束标记检测等功能,该功能与传输协议相对应,而传统串口模拟不具备此机制。
68.在本实施例中,所述模拟管道的状态变化并非主动通知外部通信程序,而是由外部通信程序自行检测管道状态实施数据发送与接收。这种方式避免了主动通知模式带来的通知消息如何可靠地传递给外部通信程序的问题。
69.由此可见,本实施例基于模拟通用硬件实现,无需程序开发人员重新修改内外交互程序代码,不影响操作系统的完整性和稳定性;通过修改传输协议,在其中检测传输过程的完整性和有效性,实现了稳定、快速的数据传输。该技术方案能够为虚拟机内外数据交换提供良好支撑。
70.基于上述实施例的内容,在本实施例中,当虚拟机内部程序向虚拟机外部程序发送第一数据时,基于所述通用串口以及所述发送状态寄存器将所述第一数据发送至所述输出缓冲区,并在所述输出缓冲区中进行数据校验,若校验通过,则修改所述输出模拟管道的管道状态,以由所述虚拟机外部程序接收所述第一数据,具体包括:
71.当虚拟机内部程序向虚拟机外部程序发送第一数据时,基于所述通用串口以及所述发送状态寄存器将所述第一数据、第一数据的长度信息和校验和信息发送至所述输出缓冲区,并在所述输出缓冲区中进行长度和校验和的校验,若校验通过,则修改所述输出模拟管道的管道状态,以由所述虚拟机外部程序接收所述第一数据;其中,所述输出缓冲区在接收所述第一数据的过程中进行应答标记成功与否的验证并在检测到数据分片结束标记时停止接收所述第一数据;
72.当虚拟机外部程序向虚拟机内部程序发送第二数据时,基于所述输入模拟管道将所述第二数据发送至所述输入缓冲区,并在所述输入缓冲区中进行数据校验,若校验通过,则修改所述接收状态寄存器的状态,以由所述虚拟机内部程序接收所述第二数据,具体包括:
73.当虚拟机外部程序向虚拟机内部程序发送第二数据时,基于所述输入模拟管道将所述第二数据、第二数据的长度信息和校验和信息发送至所述输入缓冲区,并在所述输入缓冲区中进行长度和校验和的校验,若校验通过,则修改所述接收状态寄存器的状态,以由所述虚拟机内部程序接收所述第二数据;其中,所述输入缓冲区在接收所述第二数据的过程中进行应答标记成功与否的验证并在检测到数据分片结束标记时停止接收所述第二数据。
74.在本实施例中,在串口中模拟的收发缓冲区,具有数据长度匹配、校验和计算、结束标记检测等功能,该功能与传输协议相对应。传统串口模拟不具备此机制。在本实施例中,虚拟机程序在确认数据完整性的条件下,实施快速传输。本实施例在确认数据完整性的条件下,实施快速传输的方案为:在制订数据传输协议时,除串口所定义的数据校验位之外,另外定义了数据分片的长度、结束标记、校验和、成功/失败应答标记。每次数据分片传
输过程均检测数据分片长度是否准确接收、结束标记是否正确,校验和是否正确,并根据成功与失败和应答规则,由数据接收端对数据发送端进行响应,有效的保证了数据传输的准确性。
75.在本实施例中,修改了虚拟机内部的数据传输协议,实现了一套具有容错和检测能力的数据传输方法,具备数据稳定、快速传输能力,以及较好的可扩展能力。在本实施例中,修改了虚拟机的串口状态寄存器,在单个数据传输过程中,使用模拟的字长、波特率、奇偶校验位和数据控制位等信息,虚拟机内部的主机使用该配置对串口进行设置时,虚拟机可辨别该串口为数据通信串口。在本实施例中,通过缓冲区实现数据传输,在串口进行传输时,当未接收到通信协议中的数据分片结束标记时,保持数据接收状态,不断接收新的数据。当检测到数据分片结束标记时,修改串口寄存器的状态,标记串口中有数据待接收,由虚拟机内部通信程序进行读写。
76.参见图2所示的原理图,其中模拟串口硬件、模拟管道在虚拟机程序中实现,虚拟机内部通信程序、虚拟机外部通信程序为独立的数据收发程序。串口模拟硬件的接收状态寄存器、发送状态寄存器均为模拟实现,与实际的收发状态并不一致,只有在数据接收完成,在缓冲区中存放并校验完成后,才会更改状态寄存器,提示内部通信程序进行收发。外部模拟管道也基于模拟实现,通过在程序中设置管道缓冲区,当数据接收完成,存放于缓冲区内,并且数据校验完成后,才会向管道中发送相应的数据。
77.图3示意出了虚拟机内部程序发起数据发送请求的过程,图4示意出了虚拟机外部程序发起数据发送请求的过程。
78.如图3所示,在虚拟机内部程序发起发送请求时,首先由虚拟串口的缓冲区接收数据长度、校验和信息,之后向缓冲区之内保存要传输的数据。在保存的过程中不断检测数据标记,如果能检测到结束标记,则此后的输入数据被丢弃。之后开始针对当前已经接收的数据展开长度计算,如果长度符合,则计算这部分数据的校验和,如果校验和与传输过程中的一致,则认为数据接收正确,修改管道状态,由外部程序接收相应的数据。
79.如图4所示,在虚拟机外部程序发起发送请求时,首先由虚拟管道的缓冲区接收数据长度、校验和信息,之后向缓冲区之内保存要传输的数据。在保存的过程中不断检测数据标记,如果能检测到结束标记,则此后的输入数据被丢弃。之后开始针对当前已经接收的数据展开长度计算,如果长度符合,则计算这部分数据的校验和,如果校验和与传输过程中的一致,则认为数据接收正确,修改内部虚拟串口寄存器的状态,由内部程序接收相应的数据。
80.在本实施例中,在虚拟机内部通过硬件虚拟化方式生成串口模拟设备,在虚拟机外部通过硬件虚拟化方式生成模拟管道,然后基于所述串口模拟设备和所述模拟管道进行虚拟机内部程序和虚拟机外部程序的数据交互。由此可见,本发明实施例通过直接修改虚拟机程序,在虚拟机上模拟通用串口,在虚拟机外部模拟管道,使得内部和外部程序都能够通过通用接口实现数据交换,由此可见,本发明实施例基于模拟通用硬件实现,无需程序开发人员重新修改内外交互程序代码,不影响操作系统的完整性和稳定性;通过修改传输协议,在其中检测传输过程的完整性和有效性,实现了稳定、快速的数据传输。该技术方案能够为虚拟机内外数据交换提供良好支撑。
81.基于上述实施例的内容,在本实施例中,所述输出模拟管道和所述输入模拟管道
使用文件接口方式被所述虚拟机外通信程序打开。
82.在本实施例中,所述输出模拟管道和所述输入模拟管道使用文件接口方式被所述虚拟机外通信程序打开,从而使得外部通信程序直接以文件形式打开输入管道和输出管道即可,无需进行特殊设置,降低了系统设计的复杂度。
83.基于上述实施例的内容,在本实施例中,修改所述输出模拟管道的管道状态,以由所述虚拟机外部程序接收所述第一数据,包括:
84.修改所述输出模拟管道对应的文件句柄状态,以由所述虚拟机外部程序主动读取所述第一数据。
85.在本实施例中,在虚拟机内部通信程序向虚拟机外部通信程序发送数据时,通过缓冲区实现数据传输,在管道进行传输时,同样检测协议中的数据传输结束标记,当未接收到通信协议中的数据分片结束标记时,保持数据接收状态,不断接收新的数据。当检测到数据分片结束标记时,修改虚拟文件句柄状态,标记管道中有数据待接收,由虚拟机外部通信程序进行读写。
86.需要说明的是,本实施例中的模拟管道,以文件状态的形式提供数据传输和有无数据的检测,通过模拟操作系统中的文件内核对象数据,实现状态的更改和表现。本实施例中国的模拟管道,其状态变化并非主动通知外部通信程序,由外部通信程序自行检测管道状态实施数据发送与接收。
87.需要说明的是,本实施例中所描述虚拟机程序在确认数据完整性的条件下,实施快速传输的方案为:在制订数据传输协议时,除串口所定义的数据校验位之外,另外定义了数据分片的长度、结束标记、校验和、成功/失败应答标记。每次数据分片传输过程均检测数据分片长度是否准确接收、结束标记是否正确,校验和是否正确,并根据成功与失败和应答规则,由数据接收端对数据发送端进行响应,有效的保证了数据传输的准确性。
88.基于上述实施例的内容,在本实施例中,所述在虚拟机内部通过硬件虚拟化方式生成通用串口、通用串口的接收状态寄存器、通用串口的发送状态寄存器以及输出缓冲区,具体包括:
89.在虚拟机内部通过修改虚拟机的串口模拟代码的方式生成通用串口、通用串口的接收状态寄存器、通用串口的发送状态寄存器以及输出缓冲区。
90.在本实施例中,可以采用修改虚拟机的串口模拟代码的方式生成通用串口、通用串口的接收状态寄存器、通用串口的发送状态寄存器以及输出缓冲区,例如主要修改的内容可以包括:串口的输入、输出硬件缓冲,串口的状态寄存器,串口数据传输的字长、波特率、奇偶校验位、数据控制位等相关设置。可以理解的是,本实施例修改了虚拟机的串口状态寄存器,在单个数据传输过程中,使用模拟的字长、波特率、奇偶校验位和数据控制位等信息,虚拟机内部的主机使用该配置对串口进行设置时,虚拟机可辨别该串口为数据通信串口。
91.基于上述实施例的内容,在本实施例中,所述在虚拟机外部通过硬件虚拟化方式生成输入模拟管道、输出模拟管道和输入缓冲区,具体包括:
92.在虚拟机外部构建输入模拟管道和输出模拟管道,并使用操作系统定义的接口设定输入缓冲区、管道数据通知信息以及数据收发的回调函数。
93.在本实施例中,在构建虚拟机外部输入模拟管道和输出模拟管道时,使用的方法
是构建一个虚拟管道,使用操作系统定义的接口,设定虚拟管道使用的缓冲区、管道数据通知信息、数据收发的回调函数,从而配合虚拟机内部的串口模拟设备完成数据收发功能。
94.需要说明的是,本发明实施例针对现有数据交换技术基于内存映射或网络实现,需要对每个监控的操作系统逐一编写交互驱动,且稳定性较差,难以实现可扩展、稳定的数据交互问题,提供了一种基于虚拟化硬件的数据交换方法,本发明实施例通过直接修改虚拟机程序,在虚拟机上模拟通用串口,在虚拟机外部模拟双向管道,使得内部和外部程序都能够通过通用接口实现数据交换;修改了虚拟机内部的数据传输协议,实现了一套具有容错和检测能力的数据传输方法,具备数据稳定、快速传输能力,以及较好的可扩展能力。
95.图5示出了本发明实施例提供的虚拟机内外交互装置的结构示意图。如图5所示,本实施例提供的虚拟机内外交互装置,包括:第一生成模块21、第二生成模块22和交互处理模块23,其中:
96.第一生成模块21,用于在虚拟机内部通过硬件虚拟化方式生成串口模拟设备;
97.第二生成模块22,用于在虚拟机外部通过硬件虚拟化方式生成模拟管道;
98.交互处理模块23,用于基于所述串口模拟设备和所述模拟管道进行虚拟机内部程序和虚拟机外部程序的数据交互。
99.基于上述实施例的内容,在本实施例中,第一生成模块21,具体用于:
100.在虚拟机内部通过硬件虚拟化方式生成通用串口、通用串口的接收状态寄存器、通用串口的发送状态寄存器以及输出缓冲区。
101.基于上述实施例的内容,在本实施例中,第二生成模块22,具体用于:
102.在虚拟机外部通过硬件虚拟化方式生成输入模拟管道、输出模拟管道和输入缓冲区。
103.基于上述实施例的内容,在本实施例中,交互处理模块23,具体用于:
104.当虚拟机内部程序向虚拟机外部程序发送第一数据时,基于所述通用串口以及所述发送状态寄存器将所述第一数据发送至所述输出缓冲区,并在所述输出缓冲区中进行数据校验,若校验通过,则修改所述输出模拟管道的管道状态,以由所述虚拟机外部程序接收所述第一数据;
105.和/或,
106.当虚拟机外部程序向虚拟机内部程序发送第二数据时,基于所述输入模拟管道将所述第二数据发送至所述输入缓冲区,并在所述输入缓冲区中进行数据校验,若校验通过,则修改所述接收状态寄存器的状态,以由所述虚拟机内部程序接收所述第二数据。
107.基于上述实施例的内容,在本实施例中,当虚拟机内部程序向虚拟机外部程序发送第一数据时,基于所述通用串口以及所述发送状态寄存器将所述第一数据发送至所述输出缓冲区,并在所述输出缓冲区中进行数据校验,若校验通过,则修改所述输出模拟管道的管道状态,以由所述虚拟机外部程序接收所述第一数据,具体包括:
108.当虚拟机内部程序向虚拟机外部程序发送第一数据时,基于所述通用串口以及所述发送状态寄存器将所述第一数据、第一数据的长度信息和校验和信息发送至所述输出缓冲区,并在所述输出缓冲区中进行长度和校验和的校验,若校验通过,则修改所述输出模拟管道的管道状态,以由所述虚拟机外部程序接收所述第一数据;其中,所述输出缓冲区在接收所述第一数据的过程中进行应答标记成功与否的验证并在检测到数据分片结束标记时
停止接收所述第一数据。
109.基于上述实施例的内容,在本实施例中,所述输出模拟管道和所述输入模拟管道使用文件接口方式被所述虚拟机外通信程序打开。
110.基于上述实施例的内容,在本实施例中,修改所述输出模拟管道的管道状态,以由所述虚拟机外部程序接收所述第一数据,包括:
111.修改所述输出模拟管道对应的文件句柄状态,以由所述虚拟机外部程序主动读取所述第一数据。
112.基于上述实施例的内容,在本实施例中,当虚拟机外部程序向虚拟机内部程序发送第二数据时,基于所述输入模拟管道将所述第二数据发送至所述输入缓冲区,并在所述输入缓冲区中进行数据校验,若校验通过,则修改所述接收状态寄存器的状态,以由所述虚拟机内部程序接收所述第二数据,具体包括:
113.当虚拟机外部程序向虚拟机内部程序发送第二数据时,基于所述输入模拟管道将所述第二数据、第二数据的长度信息和校验和信息发送至所述输入缓冲区,并在所述输入缓冲区中进行长度和校验和的校验,若校验通过,则修改所述接收状态寄存器的状态,以由所述虚拟机内部程序接收所述第二数据;其中,所述输入缓冲区在接收所述第二数据的过程中进行应答标记成功与否的验证并在检测到数据分片结束标记时停止接收所述第二数据。
114.基于上述实施例的内容,在本实施例中,所述在虚拟机内部通过硬件虚拟化方式生成通用串口、通用串口的接收状态寄存器、通用串口的发送状态寄存器以及输出缓冲区,具体包括:
115.在虚拟机内部通过修改虚拟机的串口模拟代码的方式生成通用串口、通用串口的接收状态寄存器、通用串口的发送状态寄存器以及输出缓冲区。
116.基于上述实施例的内容,在本实施例中,所述在虚拟机外部通过硬件虚拟化方式生成输入模拟管道、输出模拟管道和输入缓冲区,具体包括:
117.在虚拟机外部构建输入模拟管道和输出模拟管道,并使用操作系统定义的接口设定输入缓冲区、管道数据通知信息以及数据收发的回调函数。
118.本实施例针对当前虚拟机内部与虚拟机外部通信方式有限,通信接口不稳定,虚拟机内外数据交换困难的问题,通过在虚拟机硬件模拟方法中添加新的通信硬件,并实现相应的虚拟机硬件的数据获取方法、虚拟机硬件的通信方法,达到利用通信硬件实现虚拟机内外数据交互的目的。基于该技术实现了一套数据交互接口,研发相应的通信模块,实现虚拟机与外部主机程序之间的稳定、可靠数据交互,极大地提高了基于虚拟化的程序分析系统的数据传输稳定性和可靠性。
119.由于本发明实施例提供的虚拟机内外交互装置,可以用于执行上述实施例所述的虚拟机内外交互方法,其工作原理和有益效果类似,故此处不再详述,具体内容可参见上述实施例的介绍。
120.在本实施例中,需要说明的是,本发明实施例的装置中的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
121.基于相同的发明构思,本发明又一实施例提供了一种电子设备,参见图6,所述电子设备具体包括如下内容:处理器301、存储器302、通信接口303和通信总线304;
122.其中,所述处理器301、存储器302、通信接口303通过所述通信总线304完成相互间的通信;
123.所述处理器301用于调用所述存储器302中的计算机程序,所述处理器执行所述计算机程序时实现上述虚拟机内外交互方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述过程:在虚拟机内部通过硬件虚拟化方式生成串口模拟设备;在虚拟机外部通过硬件虚拟化方式生成模拟管道;基于所述串口模拟设备和所述模拟管道进行虚拟机内部程序和虚拟机外部程序的数据交互。
124.可以理解的是,所述计算机程序可以执行的细化功能和扩展功能可参照上面实施例的描述。
125.基于相同的发明构思,本发明又一实施例提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述虚拟机内外交互方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述过程:在虚拟机内部通过硬件虚拟化方式生成串口模拟设备;在虚拟机外部通过硬件虚拟化方式生成模拟管道;基于所述串口模拟设备和所述模拟管道进行虚拟机内部程序和虚拟机外部程序的数据交互。
126.可以理解的是,所述计算机程序可以执行的细化功能和扩展功能可参照上面实施例的描述。
127.基于相同的发明构思,本发明又一实施例提供了一种计算机程序产品,所计算机程序产品包括有计算机程序,该计算机程序被处理器执行时实现上述关联应用启动控制方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述过程:在虚拟机内部通过硬件虚拟化方式生成串口模拟设备;在虚拟机外部通过硬件虚拟化方式生成模拟管道;基于所述串口模拟设备和所述模拟管道进行虚拟机内部程序和虚拟机外部程序的数据交互。
128.可以理解的是,所述计算机程序可以执行的细化功能和扩展功能可参照上面实施例的描述。
129.此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
130.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
131.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上
述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的虚拟机内外交互方法。
132.此外,在本发明中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
133.此外,在本发明中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
134.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1