视频vmspri后缀名是什么意思
VCD格式是.DAT,实际就是MPG格式
为什么虚拟系统找不到VMS文件
http://www.host01.com/article/InterNet/00100004/20060909003047933.htm
目录2.1虚拟机概论
2.2加密变形病毒
2.3虚拟机实现技术详解
2.4虚拟机代码剖析
2.4.1不依赖标志寄存器指令模拟函数的分析
2.4.2依赖标志寄存器指令模拟函数的分析
2.5反虚拟机技术2.虚拟机查毒2.1虚拟机概论近些年,虚拟机,在反病毒界也被称为通用解密器,已经成为反病毒软件中最引人注目的部分,尽管反病毒者对于它的运用还远没有达到一个完美的程度,但虚拟机以其诸如”病毒指令码模拟器”和”Stryker”等多变的名称为反病毒产品的市场销售带来了光明的前景。以下的讨论将把我们带入一个精彩的虚拟技术的世界中。 首先要谈及的是虚拟机的概念和它与诸如Vmware(美国VMWARE公司生产的一款虚拟机,它支持在WINNT/2000环境下运行如Linux等其它操作系统)和WIN9X下的VDM(DOS虚拟机,它用来在32位保护模式环境中运行16实模式代码)的区别。其实这些虚拟机的设计思想是有渊源可寻的,早在上个世纪60年代IBM就开发了一套名为VM/370的操作系统。VM/370在不同的程序之间提供抢先式多任务,作法是在单一实际的硬件上模式出多部虚拟机器。典型的VM/370会话,使用者坐在电缆连接的远程终端前,经由控制程序的一个IPL命令,模拟真实机器的初始化程序装载操作,于是 一套完整的操作系统被载入虚拟机器中,并开始为使用者着手创建一个会话。这套模拟系统是如此的完备,系统程序员甚至可以运行它的一个虚拟副本,来对新版本进行除错。Vmware与此非常相似,它作为原操作系统下的一个应用程序可以为运行于其上的目标操作系统创建出一部虚拟的机器,目标操作系统就象运行在单独一台真正机器上,丝毫察觉不到自己处于Vmware的控制之下。当在Vmware中按下电源键(Power On)时,窗口里出现了机器自检画面,接着是操作系统的载入,一切都和真的一样。而WIN9X为了让多个程序共享CPU和其它硬件资源决定使用VMs(所有Win32应用程序运行在一部系统虚拟机上;而每个16位DOS程序拥有一部DOS虚拟机)。VM是一个完全由软件虚构出来的东西,以和真实电脑完全相同的方式来回应应用程序所提出的需求。从某种角度来看,你可以将一部标准的PC的结构视为一套API。这套API的元素包括硬件I/O系统,和以中断为基础的BIOS和MS-DOS。WIN9X常常以它自己的软件来代理这些传统的API元素,以便能够对珍贵的硬件多重发讯。在VM上运行的应用程序认为自己独占整个机器,它们相信自己是从真正的键盘和鼠标获得输入,并从真正的屏幕上输出。稍被加一点限制,它们甚至可以认为自己完全拥有CPU和全部内存。实现虚拟技术关键在于软件虚拟化和硬件虚拟化,下面简要介绍WIN9X下的DOS虚拟机的实现。当Windows移往保护模式后,保护模式程序无法直接调用实模式的MS-DOS处理例程,也不能直接调用实模式的BIOS。软件虚拟化就是用来描述保护模式Windows部件是如何能够和实模式MS-DOS和BIOS彼此互动。软件虚拟化要求操作系统能够拦截企图跨越保护模式和实模式边界的调用,并且调整适当的参数寄存器后,改变CPU模式。WIN9X使用虚拟设备驱动(VXD)拦截来自保护模式的中断,通过实模式中断向量表(IVT),将之转换为实模式中断调用。做为转换的一部分,VXD必须使用置于保护模式扩展内存中的参数,生成出适当的参数,并将之放在实模式(V86)操作系统可以存取的地方。服务结束后,VXD在把结果交给扩展内存中保护模式调用端。16位DOS程序中大量的21H和13H中断调用就此解决,但其中还存在不少直接端口I/O操作,这就需要引入硬件虚拟化来解决。虚拟硬件的出现是为了在硬件中断请求线上产生中断请求,为了回应IN和OUT指令,改变特殊内存映射位置等原因。硬件虚拟化依赖于Intel 80386+的几个特性。其中一个是I/O许可掩码,使操作系统可能诱捕(Trap)对任何一个端口的所有IN/OUT指令。另一个特性是:由硬件辅助的分页机制,使操作系统能够提供虚拟内存,并拦截对内存地址的存取操作,将Video RAM虚拟化是此很好的例证。最后一个必要的特性是CPU的虚拟8086(V86)模式 ,让DOS程序象在实模式中那样地执行。 我们下面讨论用于查毒的虚拟机并不是象某些人想象的:如Vmware一样为待查可执行程序创建一个虚拟的执行环境,提供它可能用到的一切元素,包括硬盘,端口等,让它在其上自由发挥,最后根据其行为来判定是否为病毒。当然这是个不错的构想,但考虑到其设计难度过大(需模拟元素过多且行为分析要借助人工智能理论),因而只能作为以后发展的方向。我设计的虚拟机严格的说不能称之为虚拟机器,而叫做虚拟CPU,通用解密器等更为合适一些,但由于反病毒界习惯称之为虚拟机,所以在下面的讨论中我还将延续这个名称。查毒的虚拟机是一个软件模拟的CPU,它可以象真正CPU一样取指,译码,执行,它可以模拟一段代码在真正CPU上运行得到的结果。给定一组机器码序列,虚拟机会自动从中取出第一条指令操作码部分,判断操作码类型和寻址方式以确定该指令长度,然后在相应的函数中执行该指令,并根据执行后的结果确定下条指令的位置,如此循环反复直到某个特定情况发生以结束工作,这就是虚拟机的基本工作原理和简单流程。设计虚拟机查毒的目的是为了对付加密变形病毒,虚拟机首先从文件中确定并读取病毒入口处代码,然后以上述工作步骤解释执行病毒头部的解密段(decryptor),最后在执行完的结果(解密后的病毒体明文)中查找病毒的特征码。这里所谓的“虚拟”,并非是创建了什么虚拟环境,而是指染毒文件并没有实际执行,只不过是虚拟机模拟了其真实执行时的效果。这就是虚拟机查毒基本原理,具体介绍请参看后面的相关章节。 当然,虚拟执行技术使用范围远不止自动脱壳(虚拟机查毒实际上是自动跟踪病毒入口的解密子将加密的病毒体按其解密算法进行解密),它还可以应用在跨平台高级语言解释器,恶意代码分析,调试器。如刘涛涛设计的国产调试器Trdos就是完全利用虚拟技术解释执行被调试程序的每条指令,这种调试器比较起传统的断点式调试器(Debug,Softice等)具有诸多优势,如不易被被调试者察觉,断点个数没有限制等。 2.2加密变形病毒前面提到过设计虚拟机查毒的目的是为了对付加密变形病毒。这一章就重点介绍加密变形技术。早期病毒没有使用任何复杂的反检测技术,如果拿反汇编工具打开病毒体代码看到的将是真正的机器码。因而可以由病毒体内某处一段机器代码和此处距离病毒入口(注意不是文件头)偏移值来唯一确定一种病毒。查毒时只需简单的确定病毒入口并在指定偏移处扫描特定代码串。这种静态扫描技术对付普通病毒是万无一失的。随着病毒技术的发展,出现了一类加密病毒。这类病毒的特点是:其入口处具有解密子(decryptor),而病毒主体代码被加了密。运行时首先得到控制权的解密代码将对病毒主体进行循环解密,完成后将控制交给病毒主体运行,病毒主体感染文件时会将解密子,用随机密钥加密过的病毒主体,和保存在病毒体内或嵌入解密子中的密钥一同写入被感染文件。由于同一种病毒的不同传染实例的病毒主体是用不同的密钥进行加密,因而不可能在其中找到唯一的一段代码串和偏移来代表此病毒的特征,似乎静态扫描技术对此即将失效。但仔细想想,不同传染实例的解密子仍保持不变机器码明文(从理论上讲任何加密程序中都存在未加密的机器码,否则程序无法执行),所以将特征码选于此处虽然会冒一定的误报风险(解密子中代码缺少病毒特性,同样的特征码也会出现在正常程序中),但仍不失为一种有效的方法
什么是垂直营销?定义是什么?
垂直营销是由生产者、批发商和零售商所组成的一种统一的联合体.某个渠道成员拥有其它成员的产权,或者是一种特约代营关系,或者某个渠道成员拥有相当实力,其它成员愿意合作.垂直营销系统可以由生产商支配,也可以由批发商,或者零售商支配.
为什么人会死 人来自那里?
人死主要是因为衰老。在人体重病不是所有的细胞都能构分裂的,而且能分裂的那些细胞(干细胞)能分裂的次数也是有限的。因此人体对自身组织的更新速度会逐渐低于衰老速度,因此人会死的。有资料显示,人在三十随时肺脏就开始衰老,其他的器官要晚一些。当人体的主要器官失去了功能,死亡是必然的。此外,体内有毒物质盒代谢产物的堆积,也是推动衰老和死亡的原因。
最后,人体的细胞是可以凋亡的,它是一种由基因控制的主动的死亡。人类个体的死亡,为自己的后代留出了更多得胜存空间,在进化的角度看是有益于种族延续的。
生命的起源:46亿年前,刚刚形成的地球是一个没有生命的世界。那时,天空中赤日炎炎,电闪雷鸣,地面上火山喷发,熔岩横溢。从火山中喷出的甲烷、氨、氢、水蒸气等气体包围在地球表面,形成了原始大气层。原始大气与现在的大气成分完全不同,没有氧,也没有臭氧层,太阳的紫外线直射到地面上。在紫外线、宇宙射线、闪电、高温等巨大的自然条件长期作用下,原始大气中的各种成分不断发生合成或分解反应,形成了多种简单的有机物,这就为原始生命的产生创造了物质条件。
后来(大约在39亿年前),地球的温度逐渐降低,但火山的喷发仍然很频繁,地壳也发生了变化,有些地方隆起形成高原和山脉,有些地方下降形成洼地和山谷。同时,大气中的水蒸气不断增多。当水蒸气达到饱合状态,冷却以后,便成为雨水降落到地面,汇入洼地,形成原始海洋。原始大气中的简单有机物也随着雨水进入原始海洋。在原始海洋中,这些简单的有机物在一定条件下,不断地进行反应,经过极其漫长的岁月,逐渐形成了原始生命。因此,原始海洋是原始生命诞生的摇篮。
小结:由此可知,原始生命是在原始地球条件下,由非生命物质经过极其漫长的岁月,逐渐形成的。
科学家们还进行了大量的科学实验来研究生命的起源。1965年我国生物学家首次人工合成了简单的蛋白质分子一一结晶牛胰岛素。1953年,美国学者米勒首次模拟原始大气成分,合成出了简单的有机物。这些实验对人们认识生命起源的过程有着十分重要的意义。虽然目前人们对生命起源的详细过程知道的还不多,但是随着科学技术的发展和研究手段的提高,人类总有一天会揭开生命起源的全部秘密。
二生物进化的历程:
原始生命的产生,揭开了生物进化发展的新纪元。原始生命产生后,由于营养方式的不同,一部分原始生命进化为具有叶绿素的进行自养生活的原始藻类;一部分原始生命进化成为没有叶绿素、靠摄取现成有机物为生的原始单细胞动物。这些原始藻类和原始单细胞动物,再各自进化成为各种各样的植物和动物。
这是一棵动物进化历程树。从树干基部到树梢表明了动植物进化的历程。越靠近树干基部的植物或动物,出现的时间离现在越久远、越低等;越靠近树梢的植物或动物出现的时间离现在越近、越高等。树干上有两个大的分枝,左边的表示动物的进化历程,右边的表示植物的进化历程。在每个分枝上又有许多小的分枝,这些小分枝依次表明了各个类群的动物和植物的进化顺序,以及进化地位。
1植物进化的历程:自然界的植物有四个主要的类群:藻类植物、苔藓植物、蕨类植物和种子植物,种子植物又包括裸子植物和被子植物。
(1)藻类植物大都生活在水中,有单细胞和多细胞的,结构比较简单,没有根、茎、叶等器官的分化。
提问:各个生物类群的特征反映了它们在进化历程中的地位,根据藻类植物的特征,我们应该把它放在生物进化历程树的什么位置?
答:藻类植物的特征表明了宏观世界是低等的植物类群,所以应该位于进化历程树的最下边的分枝上。
(2)苔藓植物一般具有茎和叶,但是茎叶里没有输导组织,受精过程离不开水,适于生活在阴湿环境中。
(3)蕨类植物具有真正的根、茎和叶,并且根、茎和叶里具有输导组织和比较发达的机械组织,植株较高大,受精离不开水,大多生活在阴湿环境中。
苔藓植物和蕨类植物都是由原始藻类经过漫长的年代进化而来。但是,从二者的特征来看,蕨类植物比苔藓植物能够更好地适应陆地生活。因此,蕨类植物比苔藓植物高等。
由于苔藓植物在结构和生殖上的特点,限制了苔藓植物进一步向陆生生活发展,而蕨类植物由于能更好地适应陆生生活,一部分原始蕨类植物逐渐进化成为种子植物。
提问:种子植物包括裸子植物和被子植物,这两大类植物,哪一类更高等,为什么?
被子植物更高等。因为种子外面有果皮包被,有利于保护种子,繁殖后代,能更好地适应陆地生活,所以被子植物是植物界最高等的类群。
小结:由此,我们可以总结出植物进化的规律,身体从单细胞到多细胞,结构由简单到复杂,地位由低等到高等,生活环境由水中逐渐过渡到陆地。
2动物进化的历程:
提问:动物可以分成几个大类群?
答:无脊椎动物和脊椎动物。
(1)我们先来看无脊椎动物的进货历程。请同学们回忆一下,无脊椎动物分为哪几个主要的门?
从结构上看,最低等、最原始的无脊椎动物是原生动物,由单细胞的原生动物进化到多细胞的腔肠动物;由二胚层的腔肠动物进化到三胚层的扁形动物;线形动物出现了肛门;环节动物出现了真正的体腔;节肢动物是真正适应了陆地生活的无脊椎动物。在这个过程中,动物的结构越来越复杂,逐渐出现了组织的分化,出现了器官和系统,生活环境逐渐从水中到陆地。
(2)在无脊椎动物中有一类叫做棘皮动物,海星、海参、海胆都是这一类动物。由原始的棘皮动物进化成了原始的脊椎动物。
提问:我们学过的脊椎动物有几个纲?
脊椎动物是高等动物,地球上最早出现的脊椎动物是古代的鱼类。古代的鱼类生活在水中,后来由于地球气候变化,湖水、池塘等干涸,古代鱼类中的总鳍鱼类,经过漫长的岁月,演变成原始的两栖类。
两栖动物是最早登上陆地的脊椎动物,但是,两栖动物还没完全摆脱水的束缚,必须在水中产卵、孵化以及渡过幼体阶段。
原始的两栖动物逐渐进化成为原始的爬行动物。爬行动物在陆地上产卵、孵化,完全摆脱了水的限制,成为真正的陆生动物。陆地生活环境的复杂多变,为动物的进化提供了新的生态环境和适应方向,原始的爬行动物向各个方向分化和发展,分别进化为原始的鸟类和哺乳类。
小结:由此看来,与植物的进化历程一样,动物也是由单细胞到多细胞,从简单到复杂,从低等到高等,从水生到陆生进化。
3由此我们可以总结出生物的进化规律:由简单到复杂,由低等到高等,由水生到陆生。
三人类的出现:在生物进化的历程中,人类是生物进化到更高阶段的产物,那么人究竟是由哪类古生物进化来的呢?
与所有哺乳动物一样,人体也具有恒温、胎生、哺乳等哺乳动物的基本特征。这说明了人类与哺乳动物有着较近的亲缘关系。在生物分类中,人类属于脊椎动物门、哺乳纲、灵长目、人科、人属、人种。在灵长目中,除人科外,还有猴科、长臂猿科、类人猿科等。
linux虚拟化什么意思
虚拟化技术的应用十分广泛. 当前虚拟化技术主要关注于服务器的虚拟化, 或在单个主机上寄存多个独立的操作系统. 本文首先介绍虚拟化技术的原理, 然后讨论多个虚拟化技术的实现方法. 另外介绍了一些其它的虚拟化技术, 比如Linux上操作系统级的虚拟化技术.
虚拟化把事物从一种形式改变为另一种形式. 计算机的虚拟化使单个计算机看起来像多个计算机或完全不同的计算机.
虚拟化技术也可以使多台计算机看起来像一台计算机. 这叫做服务器聚合(server aggregation)或网格计算(grid computing).
首先我们回顾一下虚拟化技术的历史.
虚拟化技术的历史
虚拟化技术不是一个新的主题; 实际上, 它已有40年的历史. 最早使用虚拟化技术的是IBM 7044计算机, 它是基于MIT(麻省理工学院)为IBM704计算机开发的分时系统CTSS(Compatible Time Sharing System), 和曼彻斯特大学的Atlas项目(世界最早的超级计算机之一), 首次使用了请求调页和系统管理程序调用.
硬件虚拟化
IBM早在1960年就认识到虚拟化技术的重要性, 于是开发了型号为Model 67的System/360主机. Model 67主机通过虚拟机监视器(VMM, Virtual Machine Monitor)虚拟所有的硬件接口. 在早期的计算中, 操作系统被称做Supervisor. 能够运行在其它操作系统之上的操作系统被称做hypervisor(名称首次出现在1970年).
VMM直接运行在底层硬件上, 允许执行多个虚拟机(VMs). 每一个VM(虚拟机)运行自己的操作系统实例 — 早期时候称为CMS, 或会话监视系统(CMS, Conversational Monitor System). 然后VM继续发展. 今天你能够在System z9主机上发现VM, 它能够向后兼容, 甚至是System/360.
处理器虚拟化
另外一个早期使 用的虚拟化技术, 仿真处理器, 也叫做P-code(or pseudo-code)机. P-code是一种机器语言, 运行在虚拟机上而不是实际的硬件. 知名的P-code语言在1970年由加州大学圣地亚哥分校的Pascal系统项目组开发. 它可以把Pascal程序编译成P-code代码, 然后在具有P-code功能的虚拟机上运行. P-code程序具有高度可移植性, 能够运行在任何具有P-code功能的虚拟机上.
1960年的BCPL语言(基本组合程序设计语言, Basic Combined Programming Language)也使用了同样的概念, 它是C语言的前身. 编译器首先把BCPL代码编译成一个中间机器代码: O-code. 然后, O-code被编译成目标机器代码. P-code模型已被广泛使用到各种编译器当中, 从而为编译器移植到新的主机架构提供了复杂性.(通过一个中间语言分成前端和后端).
Java虚拟机(JVM)
Java虚拟机也采用了P-code模型. 从而我们可以简单通过移植JVM程序到新架构的机器上来广泛发布Java程序.
指令虚拟化
近来频繁出现的虚拟化概念: 指令虚拟化, 也叫做二进制翻译. 在这个模型中, 虚拟指令被动态翻译成底层硬件的物理指令. 程序执行后, 代码一段一段地被翻译. 如果出现分支, 一套新的代码指令将被引入和翻译. 这十分类似于缓存操作, 指令块从内存移动到本地的快速缓存内存中执行.
近来Transmeta公司设计的Crusoe中央处理器使用了该模型. 二进制翻译由Code Morphing专利技术实现. 类似的一个实例, 全虚拟技术通过使用动态生成代码扫描来发现和重定向特权指令(解决特殊处理指令集中的问题).
虚拟化技术的类型
现在不只存在一种虚拟化技术. 事实上有多种方法可以使用不同层次的抽象来实现同样的结果. 本章介绍Linux上三种最常用虚拟化技术的优点和弱点. 业届有时使用不同的术语来描述同一个虚拟化技术. 为了保持连续性, 下面使用的术语参考了其它的术语.
虚拟化技术和游戏
一篇虚拟化技术的文章如果没有提到复合式大型电玩模拟器(MAME)就不是一篇完整的文章. MAME, 就如名字一样, 是一个能够模拟以往arcade游戏的机器模拟器(全部). 做一个补充, 整个机器是被虚拟的, 包括声音和图形还有控制硬件. MAME是一个非常棒的应用程序, 你也可以通过仔细阅读源码来了解它是如何实现的.
硬件模拟器
无可否认, 最复杂的虚拟化技术是硬件模拟器. 在这个方法中, 首先在主机系统上创建硬件VM, 然后模拟硬件的功能, 如图1显示:
图1. 硬件模拟器: 使用VM模拟需要的硬件
正如你可能猜到, 硬件模拟器的主要问题是速度极慢. 因为每一个指令在底层硬件都需模拟, 所以速度慢了100倍. 高保真模拟还包含了循环校验, 用于模拟CPU的管道和缓存行为, 实际速度会慢了1000倍.
硬件模拟有自己的优点. 比如, 使用硬件模拟, 你能够在基于ARM处理器的主机上模拟运行基于PowerPC未经任何修改的操作系统. 你甚至能在每个不同模拟处理器上运行多个虚拟机.
模拟器和开发
硬件模拟器最有意思的一个应用是firmware(固件)和硬件协作开发. firmware开发人员无需等待最新硬件的推出, 他们可以使用目标硬件的虚拟机来验证实际代码中的许多概念.
全虚拟化
全虚拟化(Full virtualization), 也称为原始虚拟化技术, 是另一种虚拟化方法. 该模型使用虚拟机协调客户操作系统和原始硬件(见图2). 这里”协调”是一个关键词, 因为VMM在客户操作系统和裸硬件之间用于工作协调. 一些受保护的指令必须由Hypervisor(虚拟机管理程序)来捕获和处理. 因为操作系统是通过Hypervisor来分享底层硬件.
图2. 全虚拟化: 使用Hypervisor分享底层硬件
全虚拟化的运行速度要快于硬件模拟, 但是性能方面不如裸机, 因为Hypervisor需要占用一些资源. 全虚拟化最大的优点是操作系统没有经过任何修改. 它的唯一限制是操作系统必须能够支持底层硬件(比如, PowerPC).
老机器上的Hypervisors
一些老的硬件如x86, 全虚拟化遇到了问题. 比如, 一些敏感的指令需要由VMM来处理(VMM不能设置陷阱). 因此, Hypervisors必须动态扫描和捕获特权代码来处理问题.
半虚拟化
半虚拟化(Paravirtualization)是另一种类似于全虚拟化的热门技术. 它使用Hypervisor(虚拟机管理程序)分享存取底层的硬件, 但是它的客户操作系统集成了虚拟化方面的代码. 该方法无需重新编译或引起陷阱, 因为操作系统自身能够与虚拟进程进行很好的协作.
图3. 半虚拟化: 通过客户操作系统分享进程
上面提到过, 半虚拟化需要客户操作系统做一些修改(配合Hypervisor), 这是一个不足之处. 但是半虚拟化提供了与原始系统相近的性能. 与全虚拟化一样, 半虚拟化可以同时能支持多个不同的操作系统.
操作系统级的虚拟化
最后一个我们需要了解的虚拟化技术是操作系统级的虚拟化(Operating system-level virtualization), 它使用不同于上面的虚拟化方法. 该技术在操作系统之上虚拟多个服务器, 支持在单个操作系统上简单隔离每一个虚拟服务器(见图4).
图4. 操作系统级的虚拟化: 隔离单个服务器
操作系统级的虚拟化需要修改操作系统内核, 它的优点是具有原始主机的性能.
为什么虚拟技术如此重要?
在了解当今主流的linux虚拟化技术之前, 我们先来看虚拟化技术的优点.
从商业角度来看, 使用虚拟化技术有非常多的原因. 不过大多是用于服务器加固. 简单来说, 如果你能够在单个服务上虚拟多个系统, 这样少数的几台计算机显然能够节省耗电, 空间, 冷却和管理开支. 考虑到确定服务器利用状况的困难, 虚拟化技术支持动态迁移(Live Migration). 动态迁移允许操作系统能够迁移到另一台全新的服务器上, 从而减少当前主机的负载.
虚拟化技术对开发人员来说 也非常重要. Linux内核占用了一个单一的地址空间, 这意味内核或任何驱动程序错误都能导致整个操作系统停止工作. 而通过虚拟化你可以运行多个操作系统, 如果其中一个系统由于错误而宕机, Hypervisor和其它的操作系统不会受到任何影响. 这对调试内核来说就如同调试用户空间程序一样.