2011-06-10 7 views
28

जब मैं windbg -k के माध्यम से लक्ष्य पर पाइप ntsd -d पाइप करता हूं, तो मैं विंडबग में स्रोत कोड शो नहीं बना सकता, लेकिन जब मैं स्थानीय रूप से डीबग करता हूं तो यह काम करता है।मैं ntsd -d के माध्यम से windbg में स्रोत कोड कैसे दिखा सकता हूं?

मैं Winlogon.exe और LSASS.exe के पहले कोड निष्पादन को डीबग करना चाहता हूं। लेकिन यह आसान समस्या को पुन: बनाने के लिए, मैं इस सेटअप बना:

  • मैं CrashMe sample application उपयोग करते हैं, स्रोत और पहले से बने प्रतीकों के साथ, सी में कॉपी किया: \ CrashMe दोनों लक्ष्य और मेजबान
  • पर मैं विंडोज़ (डीटीडब्लू) संस्करण 6.12.0002.633 हर जगह विंडोज डिबगिंग टूल्स का उपयोग करता हूं।
  • लक्ष्य विंडोज एक्सपी एसपी 3, मेजबान विंडोज 7 परम चल रहा है।
  • प्रत्येक पथ और सेटिंग्स दोनों मशीनों पर समान है: डीटीडब्ल्यू के पथ और क्रैशमे के पथ।
  • मैं हमेशा पूरी तरह से योग्य पथ का उपयोग करता हूं (जैसे c: \ dtw \ ntsd.exe)।
  • मैं एक वी एम में एक XP चलाने के लिए, साथ /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200

मैं इस आदेश, सी से लॉन्च के साथ स्थानीय स्तर पर डिबग करने में सक्षम हूँ हटा दिया गया: \ CrashMe:

windbg -g -G -srcpath C:\CrashMe -y C:\CrashMe debug\CrashMe.exe 

मैं Windows XP शुरू कर सकते हैं आभासी मशीन और यह आदेश से उसे कनेक्ट:

windbg -n -k com:pipe,port=\\.\pipe\com_1,reconnect -srcpath SRV*;C:\CrashMe -y 
c:\windows\system32;c:\windows\symbols;C:\CrashMe\debug 

लेकिन मैं एक दूरस्थ मशीन डिबग करने के लिए की जरूरत है।

  1. डिबग के माध्यम से -server और -remote
  2. चल रहे एक प्रक्रिया
  3. उपयोग छवि फ़ाइल निष्पादन विकल्प (IFEO) में तोड़कर: लक्ष्य पर, मैं इन विकल्पों की है।

इन विकल्पों में से प्रत्येक में मैं प्रतीकों (x crashme!* काम) देख सकता हूं।

मैं, # 1 (-server) या # 2 (breakin.exe <pid>) का उपयोग नहीं कर सकते हैं क्योंकि मैं एक प्रमाणीकरण प्रदाता के स्टार्टअप कोड डीबग करना चाहते हैं, तो मैं ntsd -d तहत LSASS.exe शुरू की जरूरत है। मैं इसे चलाने और बाद में संलग्न करने नहीं दे सकता।

मेरी समझ यह है कि मुझे आईएफईओ का उपयोग करने की आवश्यकता है। मैन्युअल रूप से रजिस्ट्री को संशोधित करने की gflags.exe उपयोग करने के बजाय, मैं

c:\dtw\ntsd -d -G -lines -x -y c:\symcache;c:\windows\system32 -n -srcpath C:\CrashMe\ 
  • के लिए निष्पादन योग्य विकल्प सेट मैं आवेदन तोड़ सकते हैं, लेकिन breakpoints मैं सेट नहीं मारा जाता है।
  • मैं .open कोई फ़ाइल कर सकता हूं, लेकिन मैं ब्रेकपॉइंट सेट करने के लिए फ़ाइल का उपयोग नहीं कर सकता।
  • मैं x (जांच) किसी भी प्रतीक
  • मुझे स्रोत कोड नहीं देख सकता।

मैं windbg -k के माध्यम से ntsd -d के तहत चल रहा है एक प्रक्रिया के अपने DLL स्रोत कोड कैसे देखूं?

+0

मैं अभी भी इस सवाल का जवाब नहीं मिला है, लेकिन यह ntsd नहीं किया जा रहा के साथ कुछ हो सकता है एक ग्राफिकल डीबगर? – ixe013

+0

एक संबंधित नोट पर, सटीक उसी सेटअप पर, मैं कर्नेल ड्राइवर को विंडबग में पूर्ण स्रोत कोड के साथ डीबग कर सकता हूं। – ixe013

+0

यदि आप किसी ड्राइवर को डीबग कर सकते हैं तो आपके पास पहले से एक कनेक्शन है जो उपयोगकर्ता मोड कोड (यानी आपका एप्लिकेशन) डीबग करने के लिए भी उपयोग किया जा सकता है। – 0xC0000022L

उत्तर

1

टीएल; डीआर: उपयोग-सर्वर < परिवहन > - एक दूसरे विंडबग सत्र से जुड़ें और कनेक्ट करें जिसमें .lsrcpath आप जो चाहते हैं उसे पाने के लिए सेट करें।

शेष: स्रोत मोड को स्रोत फ़ाइलों में डीबगर चलाने वाली प्रणाली से एक्सेस की आवश्यकता होती है। कर्नेल मोड कनेक्शन पर उपयोगकर्ता मोड कोड डीबग करने के मामले में, यह मुश्किल हो जाता है। चूंकि परीक्षण लक्ष्य मशीन पर ntsd के संदर्भ में निष्पादित हो रहा है, और वह मशीन डीबगर में टूटा हुआ है, स्रोत फ़ाइलों को लोड करना आम तौर पर काम नहीं करता है। मेरा मानना ​​है कि यदि आप लक्ष्य मशीन पर एक पूर्ण स्रोत पेड़ डालते हैं या किसी स्रोत के स्रोत पथ को इंगित करते हैं, तो हो सकता है, लेकिन मैंने इसे सत्यापित नहीं किया है।

क्या इस बात की पुष्टि की थी कि you can use this method to get source files loaded in your host machine.

यह निम्न कार्य करके काम करता है: के साथ (उदाहरण के लिए) `ntsd लक्षित मशीन पर

  • प्रारंभ ntsd

    1. आपके मेजबान कर्नेल डिबगर प्रारंभ - सर्वर टीसीपी: पोर्ट = 50000 -ddefer test.exe`
    2. अपने डीबग सर्वर से कनेक्शन शुरू करें (उदाहरण के लिए WinDbg में मैं ctrl + r `tcp: port = 50000, server = tawnos-target` का उपयोग करता हूं)
    3. कनेक्शन शुरू हो जाएगा। कनेक्शन को
    4. को पूरा करने की अनुमति देने के लिए अपने कर्नेल डीबगर (जिसे इनपुट> पर बैठा होना चाहिए) पर स्विच करें और इस बिंदु पर, आपका रिमोट कनेक्शन पूरा होना चाहिए। अब आप की जरूरत के रूप में प्रतीकों को फिर से लोड और .lsrcpath का प्रयोग कर एक srcpath कि WinDbg स्रोत कोड को देखने के लिए उपयोग करेगा स्थापित करने के लिए कर सकते हैं
  • +0

    नियमित उपयोगकर्ता मोड प्रक्रियाओं के लिए '-सर्वर' कार्यों का उपयोग करके आप कठोर हैं। मैंने इसे अपने (लंबे) पोस्ट में उल्लेख किया। लेकिन मैं lsass या winlogon डीबग करने के लिए '-सर्वर' विकल्प का उपयोग कैसे कर सकता हूं, जिसे मैं स्वयं शुरू नहीं कर सकता? – ixe013

    +0

    अगर मुझे गलत नहीं लगता है, तो यह काम करेगा (मैं इस सोमवार का परीक्षण कर सकता हूं)। 'Ntsd -d' का उपयोग करने के बजाय' -ddefer' के साथ '-सेवर'' को मिलाएं।यह आपको प्रारंभिक प्रक्रिया स्टार्टअप के साथ-साथ आपके स्रोत कोड को देखने की दूरस्थ क्षमता में तोड़ने के लाभ प्राप्त करने की अनुमति देगा। अगर मैं सोमवार तक और अधिक नहीं सुनता तो मैं आपको सत्यापित और रिपोर्ट कर दूंगा। – Tawnos

    संबंधित मुद्दे

     संबंधित मुद्दे