निम्न असेंबली कोड एक एंटी-डिबगिंग उपकरण क्यों है?यह कोड मुझे डीबगर का पता लगाने में सक्षम क्यों करता है?
l1:
call l3
l2:
;some code
l3:
mov al, 0c3h
mov edi, offset l3
or ecx, -1
rep stosb
मुझे पता है कि C3hRETN
है और मुझे पता है कि stobs
edi
में ऑफसेट और यह rep
की वजह से ecx
समय के लिए किया जाता है के अनुसार opcode के रूप में al
में मूल्य लिखता है।
मुझे यह भी पता है कि stobs
और stosw
चलाए जाएंगे यदि वे इंटेल आर्किटेक्चर पर उनके मूल प्रारूप के रूप में पूर्व-प्राप्त किए गए थे।
यदि हम डिबग किए गए मोड में प्रोग्राम चलाते हैं तो प्री-फ़ेच अप्रासंगिक है और एल 2 लेबल चलाएगा (क्योंकि यह सिंगल-चरण है) अन्यथा यदि कोई डीबगर नहीं है तो यह l1 और l3 am के बीच पिंग-पोंग होगा। सही?
क्या यह अभी भी इस बात पर निर्भर नहीं करेगा कि यह एकल चरण पर सेट है या नहीं? क्योंकि मैं ईमानदारी से नहीं देख सकता कि क्यों अन्यथा इस पर डीबगर ठोकर खाएगा। एकल चरण में नियम कुछ हद तक अलग हैं। – 0xC0000022L
http://stackoverflow.com/questions/12633599/anti-debug-using-prefetch-queue-doesnt-work-with-my-cpu – 0x90