cs
कोड सेगमेंट है। cs:ip
, जिसका अर्थ है cs
ip
(निर्देश सूचक) के साथ अगले निर्देश के स्थान पर इंगित करता है। तो cs
या ip
पर कोई भी परिवर्तन या दोनों पते को उस स्थान से बदलता है जहां से अगला निर्देश प्राप्त किया जाएगा और निष्पादित किया जाएगा।
आमतौर पर आप एक jmp
(लंबी कूद) के साथ cs
, call
(लंबी कॉल) बदलने के लिए, retf
, int3
, int
या iret
। 8088 और 8086 pop cs
में भी उपलब्ध है (ओपोड 0x0F)। pop cs
186+ में काम नहीं करेगा, जिसमें ओपोड 0x0F मल्टीबाइट निर्देशों के लिए आरक्षित है। http://en.wikipedia.org/wiki/X86_instruction_listings
लंबी कूद या लंबी कॉल में स्वाभाविक रूप से खतरनाक कुछ भी नहीं है। आपको सिर्फ यह जानना होगा कि आप कहां कूदते हैं या कॉल करते हैं और सुरक्षित मोड में आपको पर्याप्त निजीकरण करने की आवश्यकता होती है। 16-बिट वास्तविक मोड (उदाहरण के लिए डॉस) में आप कूद सकते हैं और जो भी पता चाहते हैं उसे कॉल कर सकते हैं, उदाहरण के लिए। jmp 0xF000:0xFFF0
cs
से 0xF000
और ip
से 0xFFF0
पर सेट करता है, जो BIOS कोड का प्रारंभ पता है, और इस प्रकार कंप्यूटर को रीबूट करता है। अलग-अलग मेमोरी पतों में अलग-अलग कोड होते हैं और इस प्रकार विभिन्न प्रकार के परिणाम होते हैं, सिद्धांत में सबकुछ संभव हो सकता है (यदि आप हार्ड ड्राइव को स्वरूपित करने के लिए उपयोग किए गए BIOS कोड में कूदते हैं, वैध रजिस्टर और/या स्टैक मानों के साथ, तो हार्ड ड्राइव स्वरूपित की जाएगी 'के रूप में अनुरोध किया')। अभ्यास में jmp
और call
अधिकतर पते पर संभवतः अमान्य ओपोड या कुछ अन्य अपवाद (शून्य से विभाजित, ओवरफ्लो विभाजित आदि) में परिणामस्वरूप जल्द ही परिणाम मिलता है।
'सीएस' = कोड सेगमेंट। मुझे लगता है कि इसे बदलना समकक्ष (कुछ अर्थ में) एक विकृत 'jmp' है। – valdo
वह दस्तावेज़ काफी अविश्वसनीय लगता है: "कभी भी 'सीएस' बदलें' !!, लेकिन आप 'सीएस' को इस प्रकार पढ़ सकते हैं: 'mov ds, cs';' सीएस' का मान 'D'S में रखें।" खैर, x86 में 'mov ds, cs' और न ही कोई अन्य' mov segreg, segreg 'जैसे कोई निर्देश नहीं है। 'सीएस' के मूल्य को पढ़ने के लिए आप या तो 'mov reg, cs; mov ds, reg' (जहां 'reg'' ax', 'bx',' cx' आदि हो सकता है ...), या 'पुश सीएस; पॉप डीएस '। इसके अलावा, यदि आप कभी भी * सी * परिवर्तन नहीं करना चाहते हैं, तो सभी इंटरप्ट कॉल प्रश्न से बाहर हैं (उदाहरण के लिए BIOS, डॉस और लिनक्स सेवाएं)। http://web.itu.edu।tr/kesgin/mul06/intel/instr/mov.html – nrz
@nrz: 'दूरदराज के सेवाओं' के माध्यम से सुलभ "लिनक्स सेवाएं" जैसी कोई चीज़ नहीं है (इंटरप्ट/सिस्को अलग-अलग काम करते हैं, भले ही इन्हें 'सीएस में बदलाव हो ', _caller_ यह नियंत्रित नहीं कर सकता कि वह लक्ष्य 'सीएस' क्या होगा, आईडीटी प्रविष्टियों/syscall msrs सेट करते समय ओएस द्वारा तय किया जाता है)। अन्य सभी के साथ ऐक, स्पष्ट रूप से 'cs' _can_ बदला जा सकता है, बस जब तक कि लक्ष्य कोड खंड मौजूद न हो और इस तरह से स्थापित किया जाए कि लक्ष्य 'ईआईपी' पहुंच योग्य है, ऐसी कोई भी कॉल' # जीपी 'गलती का कारण बन जाएगी और ऐप निरस्त हो जाएगा। –