
Windows और UEFI के लिए न्यूनतम Intel VT-x हाइपरवाइज़र जो इंट्रोस्पेक्शन के लिए लाइव होस्ट को वर्चुअलाइज़ करता है, डायनामिक हाइपरजैकिंग, अनहाइपरजैकिंग, EPT, और VPID का समर्थन करता है।
SimpleVisor एक सरल, पोर्टेबल, Intel x64/EM64T VT-x विशिष्ट हाइपरवाइज़र है जिसके दो विशिष्ट लक्ष्य हैं: सबसे कम असेंबली कोड (10 पंक्तियाँ) का उपयोग करना, और डायनामिक हाइपरजैकिंग और अनहाइपरजैकिंग (अर्थात, होस्ट के भीतर से होस्ट स्टेट को वर्चुअलाइज़ करना) का समर्थन करने के लिए सबसे कम VMX-संबंधित कोड रखना, साथ ही EPT और VPID जैसी उन्नत सुविधाओं का भी समर्थन करना। यह वर्तमान में Windows और UEFI वातावरण दोनों पर चलता है।
क्या आप हमेशा से जिज्ञासु रहे हैं कि हाइपरवाइज़र कैसे बनाया जाए? क्या Intel के दस्तावेज़ीकरण (सैकड़ों पृष्ठों) ने आपको निराश किया है? क्या ऑनलाइन मिले नमूनों ने चीज़ों को और अधिक भ्रमित कर दिया है, या उन्हें समझने के लिए हजारों पंक्तियों के कोड को हफ्तों तक पढ़ने की आवश्यकता पड़ी है? यदि हाँ, तो SimpleVisor आपके लिए उपयुक्त प्रोजेक्ट हो सकता है।
कोड की प्रत्येक पंक्ति को समझाने वाली विस्तृत टिप्पणियों, और विशिष्ट Windows-संबंधित या Intel-संबंधित विशिष्टताओं को छोड़कर, SimpleVisor लगभग 500 पंक्तियों के C कोड और 10 पंक्तियों के x64 असेंबली कोड का है, और यह 64-बिट Windows के प्रत्येक हालिया संस्करण पर चलने की क्षमता रखता है, तथा रनटाइम पर डायनामिक लोड/अनलोड का समर्थन करता है।
इसके अतिरिक्त, SimpleVisor Windows-विशिष्ट कार्यक्षमता के लिए एक हल्की OS-लाइब्रेरी का उपयोग करता है, जो हाइपरवाइज़र के हिस्सों को Windows-विशिष्ट हिस्सों से अलग करती है। इस पोर्टेबल डिज़ाइन का लाभ उठाते हुए, SimpleVisor का एक UEFI संस्करण भी अब उपलब्ध है। हालाँकि, ध्यान दें कि UEFI से जुड़ी समस्याओं के कारण इसमें MP वातावरण के लिए मजबूत समर्थन नहीं है, और ऑपरेटिंग सिस्टम लोड करने पर अंततः क्रैश हो जाएगा क्योंकि OS प्रोसेसर संसाधनों के अपने पुनः-कॉन्फ़िगरेशन के कारण अकार्यान्वित कोड पथों से टकराएगा। UEFI से ऑपरेटिंग सिस्टम के पूरे बूट को वर्चुअलाइज़ करना इस प्रोजेक्ट के दायरे से बाहर है।
SimpleVisor को Visual Studio 2015 Update 3 के साथ बनाया जा सकता है, और हालाँकि पुराने/नए कंपाइलरों का परीक्षण नहीं किया गया है और वे समर्थित नहीं हैं, संभावना है कि वे भी प्रोजेक्ट को बना सकते हैं। हालाँकि, विभिन्न कंपाइलर और लिंकर सेटिंग्स को वैसे ही रखना महत्वपूर्ण है जैसे आप उन्हें देखते हैं।
SimpleVisor का वर्तमान में निम्नलिखित प्लेटफ़ॉर्मों पर सफलतापूर्वक परीक्षण किया गया है:
इस समय, इसका Bochs पर परीक्षण नहीं किया गया है, लेकिन ऐसा कोई कारण नहीं है कि SimpleVisor ऐसे वातावरण में भी क्यों नहीं चल सकता। हालाँकि, यदि आपकी मशीन पहले से ही Hyper-V या Xen जैसे हाइपरवाइज़र के अंतर्गत चल रही है, तो SimpleVisor लोड नहीं होगा।
ध्यान रखें कि Windows के x86 संस्करण स्पष्ट रूप से समर्थित नहीं हैं, न ही Nehalem माइक्रोआर्किटेक्चर से पहले के प्रोसेसर, और न ही Windows 7। बाद वाले दो के लिए समर्थन जोड़ना आसान है और यह कुछ फोर्क्स में मौजूद है।
बहुत सारे हाइपरवाइज़र प्रोजेक्ट या तो अत्यधिक जटिल हैं ([Xen][1], KVM, VirtualBox) और/या क्लोज़्ड-सोर्स (VMware, Hyper-V), साथ ही Linux-आधारित विकास या सिस्टम की ओर अत्यधिक केंद्रित हैं। इसके अतिरिक्त, उनमें से अधिकांश (Hyper-V के अलावा) स्पष्ट रूप से वर्चुअल मशीनों के निष्पादन को सक्षम करने के उद्देश्य से बनाए गए हैं, न कि किसी जीवित, चल रहे सिस्टम के वर्चुअलाइज़ेशन के लिए, ताकि उस पर इंट्रोस्पेक्शन या अन्य सुरक्षा-संबंधित कार्य किए जा सकें।
हालाँकि, कुछ प्रोजेक्ट भीड़ से अलग हैं, जैसे Joanna का मूल [Blue Pill][2], या [VirtDbg][3] और [HyperDbg][4] जैसे प्रोजेक्ट। दुर्भाग्य से, इनमें से अधिकांश अब काफी पुराने हो चुके हैं, और कुछ केवल x86 प्रोसेसरों पर कार्य करते हैं, और Windows 10 जैसे नए ऑपरेटिंग सिस्टम का समर्थन नहीं करते। एक अन्य काफी सरल उदाहरण, जो कुछ पहलुओं में Blue Pill के समान है, लेकिन वास्तव में "Split-TLB" के लिए EPT उपयोग का अच्छा उदाहरण प्रदान करता है, वह Jacob Torrey/AIS का [MoRE][7] है।
वास्तव में Windows-केंद्रित, आधुनिक, और समर्थित हाइपरवाइज़र प्रदान करने वाला सबसे निकटतम प्रोजेक्ट [HyperPlatform][5] है, और हम अधिक व्यापक रूप से उपयोगी शोध-प्रकार के हाइपरवाइज़र विकास के लिए एक प्रारंभिक बिंदु के रूप में इसके उपयोग की दृढ़ता से सिफारिश करते हैं। हालाँकि, एक अधिक व्यापक रूप से मजबूत सामान्य "प्लेटफ़ॉर्म" बनाने के प्रयास में, HyperPlatform भी कुछ हद तक ब्लोट से ग्रस्त है, जिससे यह समझना कठिन हो जाता है कि हाइपरवाइज़र की वास्तविक बुनियादी आवश्यकताएँ क्या हैं, और इसे कैसे प्रारंभ किया जाए। इसी तरह, STL/C++ के प्रति समान प्रेम दिखाते हुए, लेकिन एक ELF लोडर और UEFI/Linux समर्थन के साथ-साथ यूनिट टेस्ट और और भी अधिक मजबूती सहित [Bareflank][8] भी है, जो AIS से ही है। इससे आगे, आप संभवतः Xen-स्तर की जटिलता में प्रवेश कर रहे हैं।
इस प्रोजेक्ट का स्पष्ट लक्ष्य, जैसा कि ऊपर कहा गया है, नकारात्मक दुष्प्रभावों का कारण बने बिना किसी भी तरह से कोड को न्यूनतम करना था, और 'बेयर-मेटल' आवश्यकताओं पर ध्यान केंद्रित करना था। इसमें शामिल हैं:
एक अन्य निहित लक्ष्य हार्डवेयर सुविधाओं में नवीनतम का समर्थन करना था, क्योंकि [Bochs][6] में भी हमेशा नवीनतम Intel VMX निर्देश और/या परिभाषाएँ नहीं होती हैं। ये अक्सर "vmcs.h" और "vmx.h" जैसी हेडर फ़ाइलों में पाई जाती हैं जिन्हें विभिन्न प्रोजेक्ट्स में विभिन्न स्तरों की परिभाषा के साथ रखा जाता है। उदाहरण के लिए, Xen master में कुछ अप्रकाशित VM Exit कारण हैं, लेकिन कुछ प्रकाशित कारण नहीं हैं, जो Bochs में हैं, हालाँकि इसमें अप्रकाशित वाले नहीं हैं! ऐसा ही एक उदाहरण 1GB EPT एंट्रीज़ का उपयोग है, जिसे उदाहरण के लिए VMWare सही ढंग से वर्चुअलाइज़ नहीं करता।
अंत में, SimpleVisor एक शैक्षिक उपकरण होने के लिए है -- इसमें कोड की प्रत्येक पंक्ति के पीछे के सभी तर्क को समझाने वाली विस्तृत टिप्पणियाँ हैं, और विशिष्ट Windows या Intel VMX युक्तियाँ और ट्रिक्स जो इसे अपना वांछित परिणाम प्राप्त करने में सक्षम बनाती हैं। विभिन्न बग्स या खराब तरीके से प्रलेखित व्यवहारों को स्पष्ट रूप से उजागर किया गया है।
चूँकि x64 Windows को सभी ड्राइवरों के हस्ताक्षरित होने की आवश्यकता होती है, आपको SimpleVisor बाइनरी को टेस्टसाइन करना होगा। Visual Studio प्रोजेक्ट फ़ाइल को "Driver Signing" विकल्पों का उपयोग करके और अपने स्वयं के प्रमाणपत्र के साथ "Test Sign" सक्षम करके ऐसा करने के लिए सेटअप किया जा सकता है। UI से, आप अपना स्वयं का भी उत्पन्न कर सकते हैं।