Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग · पाठ

कस्टम अपवाद हैंडलर

विशिष्ट त्रुटि स्थितियों को निम्नतम स्तर पर प्रबंधित करने के लिए अपने कस्टम अपवाद हैंडलर लिखना और पंजीकृत करना सीखिए।

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

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

सिस्टम त्रुटियों को रोकना

कस्टम अपवाद हैंडलर विशेष रूटीन होते हैं, जो CPU के सामने अपवाद के रूप में जानी जाने वाली कोई अप्रत्याशित घटना आने पर नियंत्रण संभालते हैं। ये घटनाएँ शून्य से भाग देने जैसी प्रोग्रामिंग त्रुटियों से लेकर मेमोरी पहुँच उल्लंघनों तक हो सकती हैं।

सिस्टम के क्रैश होने के बजाय, कस्टम हैंडलर आपको इन घटनाओं को बीच में रोकने, समस्या का निदान करने या सुरक्षित ढंग से उससे उबरने की सुविधा देता है। ऑपरेटिंग सिस्टम और निम्न-स्तरीय डीबगिंग के लिए यह अत्यंत महत्वपूर्ण है।

अपवादों पर CPU की प्रतिक्रिया

जब कोई अपवाद होता है, तो किसी भी हैंडलर कोड को निष्पादित करने से पहले CPU महत्वपूर्ण चरणों की एक श्रृंखला पूरी करता है:

  • यह वर्तमान EFLAGS, CS (कोड सेगमेंट) और EIP (निर्देश सूचक) को स्टैक पर रखता है।
  • कुछ अपवादों (जैसे पृष्ठ दोष) के लिए एक त्रुटि कोड भी स्टैक पर रखा जाता है।
  • इसके बाद CPU अपवाद हैंडलर का पता खोजने के लिए Interrupt Descriptor Table (IDT) में संबंधित प्रविष्टि खोजता है।
  • अंत में, यह नियंत्रण उस हैंडलर को सौंप देता है।

अपवाद हैंडलर की संरचना

एक मजबूत अपवाद हैंडलर को CPU की स्थिति सावधानीपूर्वक प्रबंधित करनी चाहिए। इसकी मुख्य ज़िम्मेदारियों में ये शामिल हैं:

  • संदर्भ सहेजना: सभी सामान्य-उद्देश्य रजिस्टरों को उनके मान सुरक्षित रखने के लिए स्टैक पर रखना।
  • प्रसंस्करण: अपवाद का विश्लेषण करना और संभवतः त्रुटि कोड या सहेजे गए EIP को पढ़कर त्रुटि उत्पन्न करने वाले निर्देश का स्थान पता करना।
  • संदर्भ पुनर्स्थापित करना: सहेजे गए सामान्य-उद्देश्य रजिस्टरों को उल्टे क्रम में स्टैक से निकालना।
  • वापसी: बाधित प्रोग्राम या ऑपरेटिंग सिस्टम को नियंत्रण लौटाने के लिए iret (या 32-बिट के लिए iretd) निर्देश का उपयोग करना।

रजिस्टरों को सही ढंग से सहेजने या पुनर्स्थापित करने में विफलता से सिस्टम अस्थिर हो सकता है।

एक बुनियादी हैंडलर अंश

यहाँ अपवाद हैंडलर की एक वैचारिक संरचना दी गई है। ध्यान रखें कि यह विशेष अंश अपने आप चलने योग्य नहीं है; वास्तविक हैंडलर स्थापित करने के लिए कर्नेल-स्तरीय विशेषाधिकार और उचित ऑपरेटिंग सिस्टम संदर्भ आवश्यक होता है।

; --- Conceptual Exception Handler Snippet ---
; (Not runnable as a standalone program)

my_exception_handler:
    pushad              ; Save all 32-bit GPRs (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI)

    ; --- Handler Logic Goes Here ---
    ; Example: Read error code (if present), analyze EIP
    ; mov ebp, esp      ; Can use EBP to access stack frame
    ; mov eax, [ebp + 36] ; Example: Access EIP
    ; ... perform error logging, recovery, etc. ...

    popad               ; Restore all GPRs
    add esp, 4          ; Adjust stack if an error code was pushed by CPU
                        ; (depends on exception type)
    iret                ; Return from interrupt/exception

अपवादों के लिए IDT प्रविष्टि

अपने कस्टम हैंडलर को पंजीकृत करने के लिए हमें Interrupt Descriptor Table (IDT) में एक प्रविष्टि भरनी होगी। यह प्रविष्टि आम तौर पर एक व्यवधान गेट डिस्क्रिप्टर (या अपवादों के लिए ट्रैप गेट) होती है।

इस 8-बाइट डिस्क्रिप्टर के मुख्य फ़ील्ड में ये शामिल हैं:

  • ऑफ़सेट: हमारे हैंडलर फ़ंक्शन का 32-बिट पता।
  • सेगमेंट चयनकर्ता: उस कोड सेगमेंट की पहचान करता है जिसमें हमारा हैंडलर स्थित है।
  • DPL (Descriptor Privilege Level): इस व्यवधान/अपवाद को कॉल करने के लिए आवश्यक न्यूनतम विशेषाधिकार स्तर।
  • प्रकार: यह निर्दिष्ट करता है कि यह व्यवधान गेट है या ट्रैप गेट।

गेट डिस्क्रिप्टर बनाना

व्यवधान गेट डिस्क्रिप्टर को हाथ से बनाने में हैंडलर के पते और विशेषताओं को विशेष बाइटों में सावधानीपूर्वक रखना शामिल है। यह कार्य आम तौर पर निम्न-स्तरीय वातावरण में असेंबली या C कोड में किया जाता है।

32-बिट व्यवधान गेट के लिए:

  • ऑफ़सेट के बिट 0-15 को बाइट 0-1 में रखा जाता है।
  • सेगमेंट चयनकर्ता को बाइट 2-3 में रखा जाता है।
  • फ़्लैग (P, DPL, Type) को बाइट 5 में रखा जाता है।
  • ऑफ़सेट के बिट 16-31 को बाइट 6-7 में रखा जाता है।

इससे CPU को ठीक-ठीक पता रहता है कि किस स्थान पर और किन विशेषाधिकारों के साथ जाना है।

अपने हैंडलर को सक्रिय करना

गेट डिस्क्रिप्टर तैयार हो जाने के बाद उसे IDT में सही स्थान पर लिखा जाना आवश्यक है। इसमें आम तौर पर ये चरण शामिल होते हैं:

  1. IDT प्रविष्टि का भौतिक पता निकालना (IDT_base + (exception_number * 8))।
  2. उस मेमोरी स्थान पर 8-बाइट डिस्क्रिप्टर लिखना।

महत्वपूर्ण: IDT में बदलाव करने के लिए आम तौर पर कर्नेल-स्तरीय विशेषाधिकार (Ring 0) आवश्यक होते हैं। उपयोगकर्ता-मोड प्रोग्राम सीधे IDT में बदलाव नहीं कर सकते, क्योंकि इससे सिस्टम की सुरक्षा और स्थिरता खतरे में पड़ सकती है।

INT 0 को संभालना (शून्य से भाग)

सबसे आम और सरल अपवादों में से एक शून्य से भाग देने का अपवाद (INT 0) है। यह तब होता है जब कोई पूर्णांक-विभाजन निर्देश शून्य से भाग देने का प्रयास करता है।

INT 0 के लिए कस्टम हैंडलर निम्न कार्य कर सकता है:

  • डिबग कंसोल पर त्रुटि संदेश प्रिंट करना।
  • त्रुटि उत्पन्न करने वाले निर्देश का पता लॉग करना।
  • त्रुटिपूर्ण प्रक्रिया को सुरक्षित रूप से समाप्त करना।
  • कुछ मामलों में भाजक या परिणाम को सही करने का प्रयास करके निष्पादन फिर से शुरू करना।

इससे सिस्टम के अचानक क्रैश होने के बजाय नियंत्रित तरीके से त्रुटि संभाली जा सकती है।

शून्य से भाग देने का कारण बनाना

यह एक सरल असेंबली प्रोग्राम है, जो जानबूझकर शून्य से भाग देने का अपवाद उत्पन्न करेगा। इसे चलाने पर आपके ऑपरेटिंग सिस्टम का INT 0 के लिए डिफ़ॉल्ट अपवाद हैंडलर नियंत्रण संभाल लेगा और संभवतः प्रोग्राम समाप्त कर देगा।

जैसा कि चर्चा की गई है, कस्टम हैंडलर का उद्देश्य इस डिफ़ॉल्ट व्यवहार को हमारे अपने तर्क से बदलना होगा।

; compile with: nasm -f elf32 -o divbyzero.o divbyzero.asm
; link with: ld -m elf_i386 -s -o divbyzero divbyzero.o

section .data
    msg db "Attempting divide by zero...", 10, 0

section .text
    global _start

_start:
    ; Print message (using Linux sys_write)
    mov eax, 4          ; sys_write
    mov ebx, 1          ; stdout
    mov ecx, msg        ; message address
    mov edx, 30         ; message length
    int 0x80            ; call kernel

    ; Set up for division
    mov eax, 10         ; Dividend
    mov ebx, 0          ; Divisor (will cause exception)
    
    ; Perform division - this will trigger INT 0
    div ebx             ; EAX / EBX -> EAX (quotient), EDX (remainder)

    ; This code will not be reached if exception occurs
    mov eax, 1          ; sys_exit
    xor ebx, ebx        ; exit code 0
    int 0x80

हैंडलर की ज़िम्मेदारियाँ

कस्टम अपवाद हैंडलर बनाते समय सिस्टम की स्थिरता और उचित निष्पादन सुनिश्चित करने के लिए कौन-कौन से महत्वपूर्ण चरण पूरे करने आवश्यक हैं?

कस्टम हैंडलर: पुनरावलोकन

इस पाठ में हमने कस्टम अपवाद हैंडलर की दुनिया को समझा। हमने सीखा:

  • सिस्टम की मज़बूती और डिबगिंग के लिए हैंडलर क्यों महत्वपूर्ण होते हैं।
  • अपवाद होने पर CPU किन चरणों में कार्य करता है।
  • हैंडलर की आवश्यक संरचना: संदर्भ सहेजना, संसाधित करना, संदर्भ पुनर्स्थापित करना और iret के माध्यम से लौटना।
  • हैंडलर पंजीकृत करने के लिए IDT में इंटरप्ट गेट डिस्क्रिप्टर की भूमिका।
  • डिस्क्रिप्टर बनाने और लोड करने के वैचारिक चरण, साथ ही विशेषाधिकार संबंधी आवश्यकताएँ।

इन निम्न-स्तरीय तंत्रों को समझना उन्नत सिस्टम प्रोग्रामिंग और ऑपरेटिंग सिस्टम विकास के लिए महत्वपूर्ण है।

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

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

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

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

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

क्या “कस्टम अपवाद हैंडलर” पाठ निःशुल्क है?

हाँ—“कस्टम अपवाद हैंडलर” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कस्टम अपवाद हैंडलर” में मैं क्या सीखूँगा?

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

क्या Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

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

“कस्टम अपवाद हैंडलर” पाठ पूरा करने में कितना समय लगता है?

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

क्या मैं इस Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग पाठ में कोड लिख और चला सकता हूँ?

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

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

  1. इंटरप्ट और ट्रैप को समझना
  2. इंटरप्ट डिस्क्रिप्टर टेबल (IDT)
  3. कस्टम अपवाद हैंडलर
  4. प्रोग्रामेबल इंटरप्ट कंट्रोलर (PIC) और APIC
← Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग पर वापस जाएँ