许毅见还有几个人(没有参加虚拟机编写计划的)对这个并不了解,于是便耐着性子,给他们讲解起来……
虚拟机,顾名思义,虚拟的机器。其核心思想是用软件来模拟硬件。它作为原操作系统下的一个应用程序,可以为运行于其上的目标操作系统创建出一部虚拟的机器,目标操作系统就像是运行在单独的一台真正的机器上一样,丝毫察觉不到自己处于虚拟机的控制之下。在一个成熟的虚拟机中,完全可以模拟整个计算机开机、启动、运行、关机等过程。按下电源键(PowerOn),窗口中也会出现机器自检的画面,接着是操作系统的载入,一切都和真实的一模一样,甚至还有专门的一套BIOS来处理各种IO中断。而实际上,他们只不过运行在一个虚拟的平台上而已,表现在真实的操作系统中,它只是系统中的系统,只要硬件配置足够高,这样的系统可以运行很多个,就像应用程序那样,多线程,互不影响,互不妨碍。在虚拟机中运行的应用程序认为自己独占整个机器,它们相信自己是从真正的键盘和鼠标获得输入,并从真正的屏幕上输出,它们甚至认为自己完全拥有CPU和全部内存。
例如,虚拟机中操作系统的硬盘是最外层操作系统中的表现通常是一个文件,这个文件是模拟硬盘,虚拟机中的操作系统要进行文件的读取的保存操作,实际上只是在这个文件中进行——在这个文件中格式化、分区、建立和删除文件等。
因为这个平台是软件的,是能够通过程序员编程而控制的,所以在虚拟机中,无论是操作系统的运行还是应用程序的执行,所有过程都是可跟踪和可观察的。程序员可以随时观察虚拟的CPU各个寄存器的状况和跟踪内存中数据地交换——这是一个多么奇妙的功能!编写操作系统的时候,最令程序员头疼的就是各种各样千奇百怪不可预期的BUG,一不小心,就会导致CPU挂死(死机)。而这个时候,根本没有任何有效的手段来得知那个时候,CPU中的状态到底是怎么样的,为什么会发生这种情况?所有的这些仅仅通过程序员来推测、来估计几乎是不可能的。所以,虚拟机往往被用来编写操作系统。
许毅最开始动心思编写虚拟机就是因为这个原因。后来由于实在是太过复杂,转而去编写了一个比较简单的。这也就是“生死斗”平台的前身。
“啊,原来还有这样的好东西!”一个刚刚加入团队学习的新人惊叹道,“那样的话,我们岂不是只要将病毒程序创建一个虚拟的执行环境,提供它可能用到的一切元素,包括硬盘,端口等,让它在上面自由发挥……而我们则慢慢跟踪,最后根据它的结果来判定其运行机制就可以了?”
好几个人深以为然地点了点头。当然,这些人都是没有参加过虚拟机开发的。
小黑听完之后苦笑道:“理论上是行得通的,不过实际操作起来就没有那么容易了。”
许毅说道:“小黑说得不错,一个完整的虚拟机的开发,是一个非常庞大的工程,并不是说想开发就能开出来的。在里面需要模拟的元素太多了,单单只是做虚拟机就已经非常困难了,再加上一些其他判断,其行为分析甚至还要借助于人工智能理论。”
“那……你们编写的那个不是虚拟机吗?”好问的新人再次问道。
“当然是虚拟机!”小黑反驳道,之后他又说道,“不过不是你认为的虚拟机罢了。严格说来叫它为虚拟CPU更为准确一点,或者说是通用解密器,不过大家都习惯称之为虚拟机。”这个项目是许毅一手策划的,其中很多东西都进行了简化,要不然,现在肯定还完成不了。
“那怎么办?这个虚拟机有没有用?”