
क्या आपने कभी सोचा है कि उस समय ऑपरेटिंग सिस्टम का क्या होता है जब वह अपना लोगो खींचता है और कहता है कि "स्टार्टिंग विंडोज"? और वैसे भी, इसे लोड करने में लंबा समय क्यों लगता है? आखिरकार, सिस्टम की शुरुआत में, कम्प्यूटेशनल रूप से जटिल कोई भी कार्य हल नहीं किया जा सकता है!
फिर ऑपरेटिंग सिस्टम को लोड करने का क्या मतलब है? अधिकांश भाग के लिए, यह मेमोरी में निष्पादन योग्य मॉड्यूल का प्रक्षेपण और सेवा डेटा संरचनाओं का प्रारंभ है। डेटा संरचनाएं स्मृति में रहती हैं, इसलिए उनके साथ संचालन सिद्धांत रूप में तेज होना चाहिए। सब कुछ बताता है कि निष्पादन योग्य मॉड्यूल को मेमोरी में लोड करने की प्रक्रिया से समय की खपत होती है।
आइए देखें कि ओएस स्टार्टअप पर कौन से मॉड्यूल किस मात्रा में और किस क्रम में लोड किए गए हैं। पता लगाने के लिए, उदाहरण के लिए, आप सिस्टम बूट लॉग प्राप्त कर सकते हैं। मेरे मामले में प्रायोगिक ओएस विंडोज 7 एंटरप्राइज x64 है। हम कर्नेल डीबगर का उपयोग करके बूट प्रक्रिया को लॉग करेंगे। कर्नेल डिबगर्स के लिए कई विकल्प हैं, व्यक्तिगत रूप से, मैं WinDbg पसंद करता हूं। जादुई रूप से आंख को और अधिक मनभावन करने के लिए हमें कुछ सहायक साधनों की भी आवश्यकता होगी।
खनन और क्राफ्टिंग
डिबगिंग सेटिंग्स को अच्छी तरह से गुहाया जाता है, इसलिए मैं इस प्रक्रिया का विस्तार से वर्णन नहीं करूंगा। चूंकि हम सिस्टम के शुरू होने के बाद से होने वाली हर चीज में रुचि रखते हैं, हमें "साइकिल इनिशियल ब्रेक" आइटम की जांच करने की आवश्यकता है, जिसके साथ डिबगर बंद हो जाएगा जैसे ही डीबग सिस्टम में कर्नेल डीबगिंग सबसिस्टम लोड हो जाता है। आप ".logopen" और ".logclose" कमांड का उपयोग करके फ़ाइल में आउटपुट डुप्लिकेट कर सकते हैं, यह सरल है। एक अन्य उपयोगी कमांड ".cls" है। यह कमांड स्क्रीन को साफ़ करता है, और हाँ, केवल कमांड स्क्रीन।
जिस फ़ंक्शन में हम रुचि रखते हैं, वह "MiCreateImageFileMap" है। यह मेमोरी मैनेजर का एक आंतरिक कार्य है जो मेमोरी में एक निष्पादन योग्य फ़ाइल को प्रोजेक्ट करता है। स्मृति के लिए खंड तब होता है जब एक अनुभाग बनाते हैं, उदाहरण के लिए, एक निष्पादन योग्य फ़ाइल निष्पादित करते समय। हालांकि, ध्यान दें कि यदि निष्पादन योग्य को मेमोरी में प्रोजेक्ट किया जाता है, तो यह गारंटी नहीं है कि इसका कोड निष्पादित किया जाएगा! यह फ़ंक्शन केवल एक प्रक्षेपण बनाता है, सबसे अधिक बार "रिजर्व में", ताकि यदि कोई निष्पादन के लिए मॉड्यूल को चलाने का निर्णय लेता है, तो वह इसे डाउनलोड करने से बचा सकता है। हम इस फ़ंक्शन पर लॉगिंग ब्रेकपॉइंट डालते हैं।
यदि आपके पास पर्याप्त मान है, तो निम्न कमांड दर्ज करें:
bu nt!MiCreateImageFileMap "dt nt!_EPROCESS -d ImageFileName @$proc; dt nt!_FILE_OBJECT -d FileName @rcx; g"
एक जादू लाइन का शाब्दिक अर्थ है निम्नलिखित:
- bu (सेट अनारक्षित ब्रेकपॉइंट) - एक अनसुलझे ब्रेकपॉइंट सेट करें। ऐसा नहीं है कि किसी ने या किसी चीज़ ने इसे अनुमति नहीं दी है, बस इसे स्थापित करने के लिए आपको यह तय करने की आवश्यकता है कि इसे किस पते पर रखा जाए। तथ्य यह है कि यह पहले से ज्ञात नहीं है कि यह किस पते पर स्थित होना चाहिए। किसी भी मॉड्यूल को लोड करते समय, आवश्यक फ़ंक्शन की उपस्थिति की जांच की जाती है, और यदि ऐसा फ़ंक्शन पाया जाता है, तो ब्रेकप्वाइंट स्वचालित रूप से सेट हो जाता है। एएसएलआर चालू होने पर यह इंस्टॉलेशन विधि अपरिहार्य है - एड्रेस स्पेस का रेंडमाइजेशन, चूंकि मॉड्यूल अलग-अलग पते पर हर बार लोड किए जाएंगे, और निश्चित पते पर सेट किए गए ब्रेकप्वाइंट सबसे अधिक काम से बाहर होंगे।
- nt! MiCreateImageFileMap - चरित्र को रोकने के लिए। WinDbg 'मॉड्यूल_name! फंक्शन_नाम' के रूप में एक प्रविष्टि स्वीकार करता है। इस स्थिति में, nt, ntoskrnl.exe के लिए पूर्वनिर्धारित उपनाम है।
- निम्नलिखित WinDbg स्क्रिप्ट का हिस्सा है जिसे इस फ़ंक्शन पर रुकने पर हर बार निष्पादित किया जाएगा। रूसी भाषा में "Dt nt! _EPROCESS -d ImageFileName @ $ proc" का अर्थ है "nt मॉड्यूल से _EPROCESS संरचना का ImageFileName फ़ील्ड प्रदर्शित करें, बशर्ते कि यह" वर्तमान प्रक्रिया "छद्म रजिस्टर" में निर्दिष्ट पते पर प्रदर्शित हो। के आगे "?" कमांड का अर्थ उसी के बारे में है, केवल संरचना का पता आरएक्सएक्स रजिस्टर से लिया गया है, जिसमें फ़ंक्शन का पहला पैरामीटर Microsoft x64 ABI को दिया गया है। "जी" का अर्थ है "जाना", अर्थात् निष्पादन जारी रखें।
लॉगिंग ब्रेकपॉइंट्स का उपयोग करने पर एक छोटी सी सिफारिश: डिबगर एक्सटेंशन ("के साथ शुरू होने वाली कमांड") का उपयोग न करने की कोशिश करें, क्योंकि इस मामले में लॉगिंग को परिमाण धीमे के एक क्रम का प्रदर्शन किया जाएगा।
चलो चलें! ब्रेकपॉइंट के ब्रेक को दबाएं और प्रतीक्षा करें। मैंने डेस्कटॉप के लोड होने तक इंतजार किया, अर्थात मैंने लॉग इन किया। परिणामी "फसल" को थोड़ा संपादित किया जाता है, जो आगे की प्रक्रिया की सुविधा के लिए बहुत अधिक मात्रा में छंटनी होती है और दोस्त को अजगर को खिलाया जाता है। हम लॉग को पार्स करने पर ध्यान केंद्रित नहीं करेंगे। हम केवल यह ध्यान देते हैं कि ग्राफ आर्किमिडीज सर्पिल के आकार में आगे के सुधार के साथ फिट होता है, क्योंकि नोड्स एक-दूसरे से सुपरिम्प्टेड थे। परिणामस्वरूप कॉलम पुस्तकालयों के लोडिंग ऑर्डर को ध्यान में रखता है। दुर्भाग्य से, मुझे ग्राफ की पठनीयता के लिए पुस्तकालयों के सापेक्ष निष्पादन योग्य फाइलों को लोड करने के क्रम का त्याग करना पड़ा।
स्टार आकाश का नक्शा

परंपरागत रूप से, हम कई बूट समूहों का चयन करते हैं।
OC ntoskrnl.exe मॉड्यूल में काम करना शुरू करता है, जो OS का कर्नेल है। और अधिक विशेष रूप से, KiSystemStartup () फ़ंक्शन के साथ। डाउनलोड करने योग्य सिस्टम घटकों के साथ मिलकर, यह ओएस की नींव बनाता है: ऑपरेटिंग मोड को अलग करना, उपयोगकर्ता अनुप्रयोगों के लिए बुनियादी सेवाएं, आदि। इस समूह में वे ड्राइवर भी शामिल हैं जिन्हें सिस्टम स्टार्टअप पर लोड करने के लिए चिह्नित किया गया है। संक्षेप में, विंडोज इस शेल में पैदा हुआ है।

अगला नोड सत्र प्रबंधक है। यह विंडोज - smss..exe में शुरू होने वाली सिस्टम प्रक्रिया के बाद पहले द्वारा दर्शाया गया है। यह प्रक्रिया उल्लेखनीय है कि यह एक देशी विंडोज प्रक्रिया है, अर्थात, यह Win32 सबसिस्टम का उपयोग नहीं करता है, जो सामान्य रूप से अभी तक लोड नहीं किया गया है। यह प्रक्रिया ntdll.dll के माध्यम से केवल मूल ऑपरेटिंग सिस्टम सेवाओं का उपयोग करती है, जो ओएस सेवाओं के लिए एक उपयोगकर्ता मोड इंटरफ़ेस है। यह प्रक्रिया भी ऑपरेटिंग सिस्टम का एक विश्वसनीय घटक है और इसके पास विशेष अधिकार हैं, उदाहरण के लिए, यह सुरक्षा टोकन बना सकता है। लेकिन इसका मुख्य उद्देश्य सत्र बनाना और सबसिस्टम, दोनों ग्राफिकल और विभिन्न निष्पादन योग्य (विंडोज, पॉसिक्स) को शुरू करना है। यह खोल हर किसी को उसकी जरूरत के मुताबिक देता है।

लॉगिन समूह (लॉगऑन) में कई प्रक्रियाएँ होती हैं। सामान्य तौर पर, वे सत्रों को शुरू करने के लिए जिम्मेदार हैं। इसमें स्वागत स्क्रीन प्रदर्शित करना, डेस्कटॉप बनाना, स्टार्टअप प्रक्रिया शुरू करना और सुरक्षा सबसिस्टम को प्रारंभ करना आदि शामिल हैं। यह झाड़ू सभी अजनबियों को झाडू देती है।

सबसे बड़े पैमाने पर सेवाओं का समूह था। कई मायनों में, यह सुपरफाच के लिए इसकी मात्रा के कारण है। यह वही है जिसके बारे में वे कहते हैं कि सप्ताहांत पर वह कार्यालय सूट को पहले से लोड करता है, और कामकाजी सप्ताह की शुरुआत में - खिलौने के साथ स्टीम। सुपरफास्ट सिस्टम स्टार्टअप पर बड़ी संख्या में मॉड्यूल लोड करता है, ताकि बाद में "सब कुछ तेजी से काम करता है"। और उसके अलावा, सिस्टम में सेवा अनुप्रयोगों और ऑटोस्टार्ट ड्राइवरों का अभाव है। मुझे लगता है कि सभी ने सेवाओं और एप्लिकेशन को स्नैप-इन देखा। जीवन का यह सितारा सिस्टम में वह सब कुछ लाता है जिसकी जरूरत है और इतना भी नहीं।

पिछले एक I नोट सभी का पसंदीदा एक्सप्लोरर है। यह उल्लेखनीय है कि जब तक इसे लॉन्च किया गया था, तब तक इसके द्वारा उपयोग किए जाने वाले सभी मॉड्यूल पहले से ही मेमोरी में लोड किए गए थे। एक निश्चित vcredist_x64.exe भी स्क्रीनशॉट में मिला - गरीब साथी प्रयोगात्मक वर्चुअल मशीन के डेस्कटॉप पर पड़ा था और एक्सप्लोरर द्वारा मेमोरी में लोड किया गया था।

सामान्य तौर पर, मॉड्यूल में मेमोरी में लोड करने के कई तरीके होते हैं। उदाहरण के लिए, यह निष्पादन योग्य फ़ाइल के संसाधनों से जानकारी का अनुरोध करने के लिए पर्याप्त है, जिसमें इसका आइकन भी शामिल है। विशेष रूप से, इस उदाहरण में, अन्वेषक ने जाँच की कि क्या इस कार्यक्रम के लिए विशेषाधिकारों की आवश्यकता है, अर्थात्। क्या यह आइकन को पीले-नीले शील्ड के साथ एक आइकन खींचने के लायक है। एक बार फिर, मैं ध्यान देता हूं कि एक मॉड्यूल को मेमोरी में लोड करने का मतलब उसका कोड निष्पादित करना नहीं है!
व्यक्तिगत रूप से, मैं परिणामी तस्वीर को साथ-साथ रखता हूं। यह स्पष्ट रूप से निर्भरता दिखाता है, उदाहरण के लिए, ड्राइवर। इसके अलावा, Sysinternals Autoruns उपयोगिता के साथ युग्मित, आप देख सकते हैं कि कुछ मॉड्यूल लोड करने के किस चरण को खींचा जा रहा है।
VMware वर्चुअल मशीन पर स्थापित विंडोज 7 एंटरप्राइज x64 के लिए डाउनलोड ग्राफ़ बनाया गया था। नीचे ग्राफ़ की एक वेक्टर छवि और स्वयं gml फ़ाइल है, जिसे आप किसी भी ग्राफ़ संपादक में खेल सकते हैं।
जीएमएल ग्राफग्राफ वेक्टर छविचेतावनी! बोनस!
लाइव मशीन पर स्वच्छ विंडोज 8 एंटरप्राइज x64 के लिए ग्राफ डाउनलोड करें;)
जीएमएल ग्राफग्राफ वेक्टर छविसामग्री:
WinDbg @
msdn.microsoft.com/en-us/windows/hardware/gg463009.aspxअजगर @
www.python.orgNetworkX @
networkx.lanl.govyEd ग्राफ़ संपादक @
www.yworks.com/en/products_yed_about.htmlहाथ @ कंधे