由上而下的描述。html
最頂層是管理虛擬機的入口,linux開源套件 libvirt(官網:www.libvirt.org):java
The libvirt project:linux
Recent / forthcoming release changes程序員
事實上我剛開始接觸的時候只知道virsh用來管理虛擬機,感受十分奇怪,而virsh其實就是virtual shell,CLI經常使用的有:list,dumpxml,edit,start,shutdown等,該套件還有一套GUI接口,virt-manager,到了圖形界面就至關方便了,跟vmware差很少用法。坦白講已經這個GUI早已大行其道的時代,我很是熱衷於圖形界面,由於我屬於聯想型,發散思惟,懶得死記硬背,最好看到圖形就知道怎麼用,連手冊都不用看,馬雲說「須要看長長說明書的產品就丟掉」,能用超級自動化工具,毫不手工做業,畢竟程序員就是用來發明超級自動化工具的,夠懶,才能發明出更好的超級自動化工具。shell
還要補充一點,虛擬機配置經過xml管理,使用dumpxml命令查看,這個配置文件包含了虛擬機模擬器的路徑,你能夠在這裏將其指向不一樣的虛擬機,好比x86,arm,mips,powerpc等等。這一點對於之後的安卓沙箱會用幫助。windows
這一層就到了虛擬機層了,開源項目,可是能夠模擬多種cpu,模擬外設,目前我主要修改和編譯其中的部分代碼來對抗反虛擬機病毒,細節沒必要透露,之後還會作一些相似ring -1的事情,之後作到了再寫一篇更深刻的文章。網上有大量資料,目前很少介紹了。centos6,對應的虛擬機版本爲2.5,最新版本會有不少新庫的依賴,好比libc,有不少坑要填,所以使用老舊的2.5,centos7以後,咱們將採用最新版2.12的qemu。這一層所作的事其實和java vm以及.net vm有些相似,還有WebAssemblly。centos
還有一點,採用增量鏡像的好處,第一層爲操做系統層,第二層爲應用軟件層(安裝office,wps等樣本運行環境),第三層爲空(目的是便於鏡像還原,因爲是空層使得這一層文件很是小,當樣本運行事後,用這個很小的空層文件覆蓋樣本運行後的那個增量,便可將沙箱還原爲運行樣本以前的面貌)。app
hypervisor層,使用了x86 cpu的VT技術,硬件級虛擬化技術,須要開啓cpu vt,安裝後會在設備目錄有一個/dev/kvm設備,運行在內核當中,與之對應的有windows下的hyper-V,還有蘋果的什麼我忘記了,不重要。這一層能夠跟上一層集成在一塊兒,也就是說cpu能夠由這一層提供,而外設則由上一層提供。工具
越往底層寫的越少,由於有些沒必要寫,更底層的還沒深刻研究,我是由qemu切入,而後上下延申,下一篇是驅動篇,由驅動程序入手,窺探操做系統的設計。centos7