नहीं, यह संभव नहीं है और यह भी लागू करने के लिए बहुत अक्षम हो जाएगा।
वर्तमान निर्देश के ओपोड को मिलान करने के लिए या तो हार्डवेयर ब्रेकपॉइंट डालने के लिए सीपीयू समर्थन की आवश्यकता होगी या डीबगर को सॉफ़्टवेयर ब्रेकपॉइंट का उपयोग करने के लिए पते को जानने की आवश्यकता होगी।
सिद्धांत रूप में, डीबगर केवल निर्देश की बाइट अनुक्रम के लिए पूरी मेमोरी खोज सकता है, लेकिन बाइट अनुक्रम एक निर्देश के बीच या डेटा में भी हो सकता है, इसलिए यह झूठी सकारात्मक हो सकती है।
चूंकि असेंबली निर्देश परिवर्तनीय-लंबाई हैं, नियंत्रण किसी भी मनमाना पते पर जा सकता है या कोड स्वयं को संशोधित कर सकता है, यह कुछ विशेष निर्देश खोजने के लिए स्मृति के पूरे क्षेत्र को अलग करने के लिए भी छोटा नहीं है।
तो मूल रूप से, मनमानी असेंबली कोड में निर्देश को विश्वसनीय रूप से खोजने का एकमात्र तरीका निर्देश स्तर पर एकल-चरणबद्ध होगा। और यह बेहद महंगा होगा, यहां तक कि printf()
जैसे एक छोटी लाइब्रेरी कॉल भी आज के हार्डवेयर पर मिनट ले सकती है यदि आप प्रत्येक निर्देश को सिंगल-चरण करते हैं।
स्रोत
2012-12-25 15:49:32
* "... और यह भी लागू करने के लिए बहुत अक्षम हो जाएगा।" * - मैं इस बारे में निश्चित नहीं हूँ। एक निष्पक्ष कार्यान्वयन अक्षम हो सकता है, जैसे निष्पादित होने पर प्रत्येक स्नेही की तुलना स्ट्रिंग की तरह। लेकिन जीडीबी से ऐसा करने के लिए कहा गया है जो रूसी सुझाव दिया गया उचित लगता है। मेरे मामले में, मैं 'CPUID' पर कॉल को तोड़ना चाहता हूं। इसमें केवल चार या पांच कॉल हैं, इसलिए ऐसा लगता है कि जीडीबी ने जो काम किया है, वह रूसी मेरे लिए सही होगा, इसलिए मुझे समय बर्बाद नहीं करना पड़ेगा। – jww