मैं gdb के लक्ष्य निष्पादन योग्य हूं और मेरे पास एक स्टैक भी नहीं है जो उस लक्ष्य से मेल खाता हो। मैं वैसे भी एकल-चरण करना चाहता हूं, ताकि मैं यह सत्यापित कर सकूं कि मेरे विधानसभा कोड में क्या हो रहा है, क्योंकि मैं x86 विधानसभा का विशेषज्ञ नहीं हूं। दुर्भाग्य से, जीडीबी इस सरल विधानसभा-स्तरीय डिबगिंग को करने से इनकार करता है। यह मुझे उचित ब्रेकपॉइंट पर सेट करने और रोकने की अनुमति देता है, लेकिन जैसे ही मैं एकल-चरण के लिए प्रयास करता हूं, जीडीबी त्रुटि "वर्तमान फ़ंक्शन की सीमा नहीं पा सकता है" और ईआईपी नहीं बदलता है।
अतिरिक्त जानकारिया:
मशीन कोड gcc asm स्टेटमेंट द्वारा जनरेट किया गया था और मैंने इसे कर्नेल मेमोरी लोकेशन पर कॉपी किया था जहाँ यह निष्पादित हो रहा है, objdump -d के आउटपुट से। मैं लोड ऑब्जेक्ट का उपयोग करने के लिए एक साधारण तरीके से अपने ऑब्जेक्ट कोड को स्थानांतरित पते पर लोड करने के लिए बुरा नहीं मानूंगा, लेकिन यह ध्यान रखें कि लोडिंग को कर्नेल मॉड्यूल में किया जाना है।
मुझे लगता है कि एक और विकल्प एक नकली कर्नेल मॉड्यूल या डिबग जानकारी फ़ाइल को gdb को देने के लिए होगा, जिससे यह विश्वास हो सके कि यह क्षेत्र प्रोग्राम कोड के भीतर है। जीडीबी कर्नेल निष्पादन योग्य पर ही ठीक काम करता है।
(जो लोग वास्तव में जानना चाहते हैं, मैं एक VMware VM के अंदर लिनक्स कर्नेल डेटा स्पेस में रनटाइम पर कोड डाल रहा हूं और इसे gdb रिमोट डीबगिंग से VMD वर्कस्टेशन के बिल्ट-इन gdb स्टब के माध्यम से डीबग कर रहा हूं। नोट कर्नेल नहीं लिख रहा है। शोषण करता है; मैं एक सुरक्षा स्नातक छात्र हूं जो एक प्रोटोटाइप लिख रहा है।)
(मैं अपने विधानसभा के अंदर प्रत्येक निर्देश पर एक ब्रेकपॉइंट सेट कर सकता हूं। यह काम करता है लेकिन थोड़ी देर बाद काफी श्रमसाध्य हो जाएगा, क्योंकि x86 विधानसभा निर्देशों का आकार बदलता रहता है और हर बार जब मैं रिबूट होता हूं तो विधानसभा का स्थान बदल जाएगा।)