रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें · पाठ

मेमोरी और रजिस्टर की जाँच

निष्पादन के दौरान मेमोरी क्षेत्रों की जाँच करने, रजिस्टर मान देखने और प्रोग्राम की स्थिति बदलने का अभ्यास करें।

पाठ 3, कुल 4 में से12 चरण

मेमोरी और रजिस्टर की जाँच, CoddyKit पर रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

डीबगिंग का आधार: मेमोरी और रजिस्टर

प्रोग्राम का विश्लेषण करते समय, विशेष रूप से गतिशील विश्लेषण के दौरान, CPU के अंदर क्या हो रहा है, यह समझना बहुत महत्वपूर्ण है। इसके लिए रजिस्टर और मेमोरी को देखना होता है।

ये CPU के सीधे कार्यक्षेत्र होते हैं, जिनमें वह वर्तमान में संसाधित किए जा रहे डेटा और निर्देश रखता है।

CPU की कार्य-पट्टी: रजिस्टर

रजिस्टर CPU के अंदर सीधे मौजूद बहुत छोटे और अत्यंत तेज़ भंडारण स्थान होते हैं। इन्हें CPU की “कार्य-पट्टी” समझिए, जहाँ वह तुरंत आवश्यक डेटा रखता है।

  • इनमें अस्थायी मान, पते और नियंत्रण संबंधी जानकारी रखी जाती है।
  • रजिस्टर में डेटा तक पहुँचना RAM तक पहुँचने की तुलना में बहुत तेज़ होता है।
  • अलग-अलग आर्किटेक्चर (जैसे x86, ARM) में रजिस्टर के अलग-अलग समूह होते हैं।

सामान्य x86/x64 रजिस्टर

हालाँकि रजिस्टर कई प्रकार के होते हैं, लेकिन रिवर्स इंजीनियरिंग के लिए कुछ रजिस्टर विशेष रूप से महत्वपूर्ण हैं:

  • सामान्य-उद्देश्य रजिस्टर: RAX/EAX, RBX/EBX, RCX/ECX, RDX/EDX (डेटा, फ़ंक्शन आर्ग्युमेंट और लौटाए गए मानों के लिए उपयोग किए जाते हैं)।
  • स्टैक पॉइंटर: RSP/ESP (स्टैक के शीर्ष की ओर संकेत करता है)।
  • आधार पॉइंटर: RBP/EBP (वर्तमान स्टैक फ़्रेम के आधार की ओर संकेत करता है)।
  • निर्देश पॉइंटर: RIP/EIP (अगले निष्पादित किए जाने वाले निर्देश की ओर संकेत करता है)।

GDB में रजिस्टर देखना

आइए देखें कि GDB जैसे डीबगर का उपयोग करके रजिस्टरों की जाँच कैसे की जाती है। हम एक सरल C प्रोग्राम का उपयोग करेंगे।

पहले, डीबग जानकारी के साथ संकलित कीजिए (-g): gcc -g -o myprog myprog.c

संकलन करने और GDB शुरू करने के बाद (जैसे, gdb -q ./myprog), आप ब्रेकपॉइंट लगा सकते हैं (break main), चला सकते हैं (run) और फिर info registers का उपयोग कर सकते हैं।

    #include <stdio.h>

    int main() {
        int a = 10;
        int b = 20;
        int sum = a + b;
        printf("Sum: %d\n", sum);
        return 0;
    }

प्रोग्राम का कार्यक्षेत्र: मेमोरी

मेमोरी (RAM) वह स्थान है जहाँ आपका प्रोग्राम बड़ी मात्रा में ऐसा डेटा रखता है, जिसे CPU अभी संसाधित नहीं कर रहा होता। इसमें चर, प्रोग्राम कोड और अन्य संसाधन शामिल होते हैं।

मेमोरी के प्रत्येक बाइट का एक विशिष्ट पता होता है। प्रोग्राम चलने पर उसे अपना अलग “वर्चुअल” मेमोरी स्थान मिलता है।

सरल मेमोरी विन्यास

किसी प्रोग्राम की मेमोरी आम तौर पर इन खंडों में बाँटी जाती है:

  • टेक्स्ट/कोड खंड: निष्पादन योग्य निर्देश रखता है।
  • डेटा खंड: वैश्विक और स्थिर चर रखता है।
  • हीप: गतिशील रूप से आवंटित मेमोरी के लिए उपयोग होता है (जैसे, malloc के साथ)।
  • स्टैक: स्थानीय चर, फ़ंक्शन आर्ग्युमेंट और लौटने वाले पतों के लिए उपयोग होता है।

GDB में मेमोरी देखना

GDB में मेमोरी की जाँच करने के लिए हम x कमांड (मेमोरी की जाँच) का उपयोग करते हैं। इसका सिंटैक्स लचीला होता है:

  • x /NFS ADDRESS
  • N: प्रदर्शित की जाने वाली इकाइयों की संख्या (वैकल्पिक)।
  • F: प्रारूप (जैसे, हेक्स के लिए x, दशमलव के लिए d, स्ट्रिंग के लिए s, निर्देश के लिए i)।
  • S: आकार (जैसे, बाइट के लिए b, हाफ़वर्ड यानी 2 बाइट के लिए h, वर्ड यानी 4 बाइट के लिए w, जायंट यानी 8 बाइट के लिए g)।

उदाहरण: स्टैक चर देखना

आइए अपने पिछले प्रोग्राम का उपयोग करें। इसे संकलित कीजिए और printf से पहले ब्रेकपॉइंट लगाइए। फिर हम sum का पता ढूँढ़कर उसकी सामग्री की जाँच कर सकते हैं।

यह कोड चलाइए, फिर GDB से जोड़िए (gdb -q ./myprog), पंक्ति 7 पर ब्रेकपॉइंट लगाइए (break main.c:7) और चलाइए (run)।

GDB में p &sum लिखकर उसका पता प्राप्त कीजिए। अंत में, उसका 4-बाइट मान देखने के लिए x /w ADDRESS_OF_SUM लिखिए।

    #include <stdio.h>

    int main() {
        int a = 10;
        int b = 20;
        int sum = a + b; // Breakpoint here
        printf("Sum: %d\n", sum);
        return 0;
    }

रजिस्टर मान बदलना

डीबगिंग की एक शक्तिशाली तकनीक चलते-चलते रजिस्टर के मानों को बदलना है। इससे कोड में बदलाव किए बिना प्रोग्राम का व्यवहार बदला जा सकता है।

GDB में आप set कमांड का उपयोग कर सकते हैं:

  • set $rax = 0x1234
  • set $rip = *0x400500 (नए पते पर जाएँ)

यह जाँचों को दरकिनार करने या निष्पादन के प्रवाह को दूसरी दिशा में मोड़ने के लिए उपयोगी है।

मेमोरी की सामग्री बदलना

रजिस्टरों की तरह, डीबगिंग के दौरान आप मेमोरी की सामग्री भी बदल सकते हैं। इससे आप मेमोरी में मौजूद चर के मान, स्ट्रिंग या यहाँ तक कि निर्देश भी बदल सकते हैं।

GDB के set कमांड का उपयोग करके:

  • set var_name = new_value (यदि चर वर्तमान दायरे में है)
  • set {int}0x400000 = 123 (पते 0x400000 पर मौजूद 4 बाइट को 123 में बदलें)

सावधान रहें, गलत बदलावों से प्रोग्राम क्रैश हो सकता है!

डीबगर चुनौती

आप किसी प्रोग्राम को डीबग कर रहे हैं। आप 0x7fffffff0000 मेमोरी पते पर स्थित counter नामक 4-बाइट पूर्णांक चर का मान देखना चाहते हैं। इसके लिए आप कौन-सा GDB कमांड उपयोग करेंगे?

पुनरावलोकन: डीबगिंग का आधार

आज हमने चल रहे प्रोग्राम के मूल घटकों—रजिस्टर और मेमोरी—की जाँच और उनमें बदलाव करना सीखा।

  • रजिस्टर CPU का तेज़ भंडारण होते हैं, जिन्हें info registers से देखा जाता है।
  • मेमोरी बड़ी मात्रा में डेटा रखती है, जिसे x /NFS ADDRESS से देखा जाता है।
  • प्रोग्राम की स्थिति को गतिशील रूप से बदलने के लिए दोनों में set से बदलाव किया जा सकता है।

प्रोग्राम के निष्पादन और रिवर्स इंजीनियरिंग को समझने के लिए ये कौशल बुनियादी रूप से आवश्यक हैं!

शुरुआत निःशुल्क

एआई शिक्षक के साथ Assembly सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “मेमोरी और रजिस्टर की जाँच” पाठ निःशुल्क है?

हाँ — रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “मेमोरी और रजिस्टर की जाँच” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“मेमोरी और रजिस्टर की जाँच” में मैं क्या सीखूँगा?

निष्पादन के दौरान मेमोरी क्षेत्रों की जाँच करने, रजिस्टर मान देखने और प्रोग्राम की स्थिति बदलने का अभ्यास करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“मेमोरी और रजिस्टर की जाँच” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. डिबगर की आवश्यक बातें (GDB, WinDbg)
  2. ब्रेकपॉइंट और चरणबद्ध निष्पादन
  3. मेमोरी और रजिस्टर की जाँच
  4. रनटाइम पर API और सिस्टम कॉल का अनुरेखण
← रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण की मूल बातें पर वापस जाएँ