
SoftICE-जैसा कर्नेल डिबगर Windows 11 के लिए
BugChecker SoftICE जैसा कर्नेल और उपयोगकर्ता डिबगर है जो Windows 11 (और Windows XP भी: यह Windows XP से 11 तक के संस्करणों, x86 और x64 दोनों का समर्थन करता है) के लिए है। BugChecker को WinDbg और KD की तरह डीबग किए जा रहे सिस्टम से जुड़ने के लिए दूसरी मशीन की आवश्यकता नहीं होती है। BugChecker का यह संस्करण (20 साल पहले विकसित मूल संस्करण के विपरीत) NTOSKRNL में आंतरिक और अप्रलेखित KD API का लाभ उठाता है। KD API WinDbg/KD को कॉल करने की अनुमति देता है जैसे रीड/राइट वर्चुअल मेमोरी, रीड/राइट रजिस्टर, किसी पते पर ब्रेकपॉइंट लगाना आदि।
इसके विपरीत, मूल BugChecker, SoftICE की तरह, कई कर्नेल API (निर्यातित और निजी दोनों) को हुक करके, APIC का नियंत्रण लेकर, IPIs भेजकर, आदि द्वारा सिस्टम को "अपने कब्जे में" लेता था। यह दृष्टिकोण जटिलता को तेजी से बढ़ाता है (और सिस्टम स्थिरता को कम करता है), क्योंकि कार्यान्वयन को Windows के सभी समर्थित संस्करणों और उप-संस्करणों (फ़ंक्शन हस्ताक्षर स्तर पर) के साथ-साथ सभी संभावित समर्थित हार्डवेयर कॉन्फ़िगरेशन के साथ संगत होना चाहिए। इसके अलावा, 20 साल बाद, PatchGuard इस समाधान को असंभव बना देता है।
इसके विपरीत, BugChecker का यह संस्करण, कर्नेल में KdSendPacket और KdReceivePacket पर कॉल को इंटरसेप्ट करके, डीबग की जा रही मशीन को एक बाहरी कर्नेल डिबगर चलाने वाली दूसरी प्रणाली के रूप में प्रस्तुत करता है, लेकिन वास्तव में, सब कुछ उसी मशीन पर होता है। आमतौर पर यह KDCOM.DLL को बदलकर (जो Windows में KD API के लिए सीरियल केबल संचार लागू करने वाला मॉड्यूल है) प्राप्त किया जाता है और सिस्टम को कर्नेल डिबगिंग मोड में प्रारंभ करके प्राप्त किया जाता है। यह दृष्टिकोण (VirtualKD से प्रेरित) जटिलता को कम करता है और स्थिरता और संगतता (और पोर्टेबिलिटी, उदाहरण के लिए, ARM तक - और मॉड्यूलरिटी, क्योंकि निचले स्तर की डिबगर क्षमताएं KdXxxPacket के पीछे लागू होती हैं और एक कस्टम कार्यान्वयन से बदली जा सकती हैं) को बढ़ाता है। इसके अलावा, बूट समय पर एक कर्नेल डिबगर (हालांकि "नकली") की उपस्थिति Windows को PatchGuard को अक्षम करने का कारण बनती है।
फिलहाल, BugChecker को इनपुट के लिए PS/2 कीबोर्ड और अपना आउटपुट लिखने के लिए एक लीनियर फ्रेमबफर की आवश्यकता होती है। कृपया ध्यान दें कि कई आधुनिक लैपटॉप का अंतर्निहित कीबोर्ड अभी भी PS/2 है।
Windows 11 22H2 पर, VirtualBox 7.0.4 के अंदर BugChecker का प्रदर्शन। एक JavaScript ब्रेकपॉइंट स्थिति लिखी गई है जो उपयोगकर्ता मोड थ्रेड में निष्पादन के प्रवाह को बदल देती है।
BugChecker एक बहुत ही सीमित वातावरण में चल रहा है: एक Raspberry Pi 4 (4GB RAM), Windows XP (512MB RAM) पर QEMU के माध्यम से। एक ब्रेकपॉइंट का उपयोग उपयोगकर्ता मोड से कर्नेल तक सभी SYSENTER कॉल को लॉग करने के लिए किया जाता है। सेवा सूचकांक एक जावास्क्रिप्ट सरणी में संग्रहीत किया जाता है।
BugChecker को सीधे बेयर मेटल पर, HP Pavilion Dv2000 पर चलाना, जो PS/2 कीबोर्ड वाला एक पुराना पीसी है। ओएस Windows 7 Home 32bit है।
सुनिश्चित करें कि BugChecker को स्थापित और उपयोग करते समय Secure Boot अक्षम है। आमतौर पर आप इसे बाद में पुनः सक्षम कर सकते हैं। यदि आप VMware या VirtualBox का उपयोग कर रहे हैं, तो Secure Boot को वर्चुअल मशीन सेटिंग्स में अक्षम किया जा सकता है।
यदि Windows 8, 10 या 11 का उपयोग कर रहे हैं, तो लीगेसी बूट मेनू को सक्षम करने पर भी विचार करें, कमांड का उपयोग करके: bcdedit /set "{current}" bootmenupolicy legacy। यह बूट के दौरान एक सहज अनुभव की अनुमति देता है, BugChecker बूट विकल्प का चयन करने और फिर उसी समय ड्राइवर सिग्नेचर एनफोर्समेंट को अक्षम करने की अनुमति देता है।
पहला कदम सिंबल लोडर प्रारंभ करना है:

यदि आवश्यक हो, तो "Disable Display Drvs" बटन पर क्लिक करके डिस्प्ले ड्राइवरों को अक्षम करें। वही काम Windows डिवाइस मैनेजर में भी किया जा सकता है। डिस्प्ले ड्राइवरों को अक्षम करने के बाद, वे सिस्टम रीबूट के बाद भी अक्षम रहते हैं। उन्हें बाद में किसी भी समय फिर से सक्षम किया जा सकता है जब BugChecker का उपयोग नहीं कर रहे हों।
यहाँ मुद्दा यह है कि BugChecker को अपना इंटरफ़ेस खींचने के लिए 32 बिट्स-प्रति-पिक्सेल प्रारूप के साथ एक लीनियर फ्रेमबफर की आवश्यकता होती है। डिस्प्ले ड्राइवरों को अक्षम करने पर, Windows अपने UI को खींचने के लिए हार्डवेयर त्वरण को खारिज कर देता है और VGA संगतता मोड पर वापस आ जाता है। यदि बेयर मेटल या VMware पर चल रहे हैं, तो आपको डिस्प्ले ड्राइवरों को अक्षम करना चाहिए। यदि VirtualBox पर चल रहे हैं, तो आपको डिस्प्ले ड्राइवरों को अक्षम करना चाहिए या BugChecker.dat में vm_screen सेटिंग सेट करनी चाहिए, जैसा कि नीचे वर्णित है। यदि QEMU पर चल रहे हैं, तो आपको डिस्प्ले ड्राइवरों को अक्षम करने की आवश्यकता नहीं है, लेकिन "-vga std" डिस्प्ले डिवाइस निर्दिष्ट करना सुनिश्चित करें।
ध्यान दें कि VGA संगतता मोड अधिकतम स्क्रीन रिज़ॉल्यूशन को सीमित कर सकता है। VMware 1152x864 के अधिकतम रिज़ॉल्यूशन तक सीमित है। "-vga std" डिस्प्ले डिवाइस वाला QEMU इस सीमा से ग्रस्त नहीं है।
दिलचस्प बात यह है कि यदि BugChecker एक से अधिक ग्राफिक्स कार्ड वाले सिस्टम पर स्थापित है, तो केवल एक ग्राफिक्स कार्ड के डिस्प्ले ड्राइवरों को अक्षम करना संभव है, जो वह कार्ड होगा जो उस स्क्रीन से जुड़ा होगा जो BugChecker UI दिखाएगा। दूसरा कार्ड (मुख्य डिस्प्ले के रूप में सेट) अपनी सभी 2D और 3D त्वरण सुविधाओं को बरकरार रखेगा, जिसमें OpenGL और DirectX समर्थन शामिल है (नोट: VMware पर, Windows 11 और DisplayLink डिस्प्ले के साथ परीक्षण किया गया)।