
Windows 'native' API के लिए एक strace-जैसा प्रोग्राम
यह भी देखें http://rogerorr.github.io/NtTrace/
आपको NtTrace के 64-बिट और 32-बिट संस्करणों में से एक या दोनों की आवश्यकता होगी, जो आपके लक्ष्य अनुप्रयोग(ों) से मेल खाता हो
scripts\build-vs-x64.bat या scripts\build-vs-x86.bat चलाएं।या
nmake /f NtTrace.mak चलाएंया
nmake /f NtTrace.mak चलाएंNtTrace कमांड लाइन से चलाने के लिए डिज़ाइन किया गया है।
इसका उपयोग किसी प्रोग्राम को निष्पादित करने के लिए किया जा सकता है, यदि आवश्यक हो तो तर्कों के साथ।
उदाहरण के लिए:
NtTrace -filter File cmd /c echo hello
या PID द्वारा किसी मौजूदा प्रक्रिया से जुड़ने के लिए, या -a विकल्प का उपयोग करके, नाम से।
उदाहरण के लिए:
NtTrace 1234
या
NtTrace -a notepad
विकल्पों की पूरी सूची के लिए NtTrace -h चलाएं।
डिफ़ॉल्ट रूप से NtTrace NtDll.dll के माध्यम से उजागर Windows Native API को लक्षित करता है
कॉन्फ़िगरेशन फ़ाइलें उन कई प्रवेश बिंदुओं के लिए भी प्रदान की जाती हैं जो समर्थन करते हैं Windows ग्राफिक्स इंटरफ़ेस:
Gdi32Trace.cfg ग्राफिक्स डिवाइस इंटरफ़ेस के लिए
User32Trace.cfg उपयोगकर्ता इंटरफ़ेस के लिए
आप -config कमांड लाइन तर्क का उपयोग करके डिफ़ॉल्ट NtTrace.cfg के बजाय इनमें से एक का चयन कर सकते हैं।
Windows system32 निर्देशिका में DbgHelp.dll के साथ आता है। हालाँकि, इस DLL के नए संस्करण कभी-कभी Microsoft द्वारा उनके SDK में उपलब्ध होते हैं।
OS के साथ स्थापित DLL का संस्करण डाउनलोड किए जा सकने वाले नए संस्करण पर प्राथमिकता लेता है।
यदि आप पाते हैं कि आपको सिस्टम निर्देशिका में स्थापित संस्करण से नए संस्करण की आवश्यकता है, तो आप
बाद के DbgHelp.dll की प्रतिलिपि उसी निर्देशिका में रख सकते हैं जहाँ NtTrace.exe है।
(आपको SymSrv.dll और SrcSrv.dll की भी प्रतिलिपि बनानी होगी)
NtTrace Windows डीबग इंटरफ़ेस का उपयोग करके कर्नेल में नेटिव Windows कॉल के आसपास NtDll में ब्रेकपॉइंट रखता है। हर बार जब कोई ब्रेकपॉइंट हिट होता है, NtTrace संबंधित कॉल को दिए गए तर्कों/लौटाए गए मानों को पढ़ता है।
यह उपयोगकर्ता स्तर पर काम करता है और केवल विशिष्ट प्रक्रिया (और उसकी चाइल्ड प्रक्रियाओं) को प्रभावित करता है। कर्नेल में जाने का कोई प्रयास नहीं किया जाता है। यह एक जानबूझकर किया गया डिज़ाइन निर्णय था क्योंकि इसका मतलब है कि टूल का उपयोग प्रशासनिक अधिकारों की आवश्यकता के बिना किया जा सकता है या डिवाइस ड्राइवर स्थापित करने की अनुमति के बिना। हालाँकि इसका यह भी अर्थ है कि टूल पकड़ नहीं पाएगा:
NtTrace डिफ़ॉल्ट रूप से प्रारंभ की गई प्रारंभिक प्रक्रिया की चाइल्ड प्रक्रियाओं में भी ट्रेस करता है, -pid विकल्प प्रत्येक आउटपुट लाइन में प्रक्रिया Id जोड़ देगा
यह पहचानने में मदद करने के लिए कि किस प्रक्रिया ने कौन से कॉल किए। -only विकल्प चाइल्ड प्रक्रियाओं के ट्रेसिंग को दबा देता है।
यह मल्टी-थ्रेडेड एप्लिकेशन से भी निपटता है (और -tid विकल्प यह पहचानने में मदद करेगा कि कौन सा थ्रेड प्रत्येक कॉल कर रहा है)। हालाँकि ध्यान दें, चूँकि Windows डीबग इंटरफ़ेस ईवेंट-आधारित है, यदि कई थ्रेड एक साथ कॉल करते हैं तो ट्रेसिंग क्रमबद्ध हो जाएगी।
डिफ़ॉल्ट रूप से NtDll में कॉल ट्रेस किए जाते हैं; Gdi32 और User32 के लिए कॉन्फ़िगरेशन फ़ाइलें एक अलग लक्ष्य DLL का चयन करती हैं। NtTrace वर्तमान में एक साथ विभिन्न प्रकार के सिस्टम कॉल को ट्रेस करने का समर्थन नहीं करता है।
नेटिव कॉल के लिए कॉन्फ़िगरेशन NtTrace.cfg में रखा जाता है और प्रोग्राम शुरू होने पर इस फ़ाइल को पार्स किया जाता है। ध्यान दें कि Windows के विभिन्न संस्करण कॉल के विभिन्न सेटों का समर्थन करते हैं।
कुछ नेटिव फ़ंक्शन आधिकारिक रूप से Microsoft द्वारा दस्तावेज़ित हैं लेकिन कई अदस्तावेज़ित हैं। पूरी (लगभग) सूची फ़ंक्शनों पर जासूसी कार्य और ReactOS जैसी वेब साइटों के संयोजन से प्राप्त की गई थी।
प्रत्येक फ़ंक्शन को एक श्रेणी में निर्दिष्ट किया जाता है, और फ़िल्टरिंग फ़ंक्शन नाम (आंशिक मिलान) और फ़ंक्शन श्रेणी द्वारा की जा सकती है।
डिफ़ॉल्ट रूप से NtTrace सिस्टम कॉल से वापसी पर ट्रेस करता है, लेकिन -pre विकल्प का उपयोग कॉल से पहले भी ट्रेस करने के लिए किया जा सकता है।
यह उपयोगी हो सकता है यदि, उदाहरण के लिए, एक ही संरचना का उपयोग अनुरोध और प्रतिक्रिया बफर के लिए किया जाता है।