x86

2016-04-14 5 views
5

में डीपीएल और आरपीएल के बीच अंतर इंटेल x86 मैनुअल और अन्य स्रोतों को पढ़ना, मुझे डीपीएल (वर्णनकर्ता विशेषाधिकार स्तर) और आरपीएल (अनुरोधित विशेषाधिकार स्तर) के बीच का अंतर नहीं समझा। दोनों की आवश्यकता क्यों है? आपको बहुत धन्यवादx86

उत्तर

8

अच्छा सवाल।

सीपीएल बनाम डीपीएल बनाम आरपीएल

इस आसान बनाने के लिए, की पहली बस सीपीएल और डीपीएल पर विचार करते हैं:

  • सीपीएल अपने वर्तमान विशेषाधिकार के स्तर का है।
  • डीपीएल एक सेगमेंट का विशेषाधिकार स्तर है। यह सेगमेंट तक पहुंचने के लिए न्यूनतम विशेषाधिकार स्तर को परिभाषित करता है।
  • विशेषाधिकार स्तर 0-3 से हैं; एक खंड पहुंचने के लिए, सीपीएल से कम या बराबर डीपीएल के लिए खंड

आरपीएल एक खंड चयनकर्ता के साथ जुड़े एक विशेषाधिकार स्तर है की होनी चाहिए: कम संख्या अधिक विशेषाधिकार प्राप्त

  • तो कर रहे हैं। एक सेगमेंट चयनकर्ता सिर्फ 16-बिट मान है जो एक सेगमेंट का संदर्भ देता है। प्रत्येक मेमोरी एक्सेस (निहित या अन्यथा) एक्सेस के हिस्से के रूप में सेगमेंट चयनकर्ता का उपयोग करता है।

    एक सेगमेंट तक पहुंचने पर, वास्तव में दो चेक किए जाने चाहिए। खंड के लिए प्रवेश केवल अनुमति दी है अगर दोनों निम्न में से सत्य हैं:

    • सीपीएल < = डीपीएल
    • आरपीएल < = डीपीएल

    इसलिए भले ही सीपीएल पर्याप्त एक का उपयोग करने के लिए विशेषाधिकार प्राप्त है सेगमेंट, अगर सेगमेंट चयनकर्ता जो खंड को संदर्भित करता है, तो पर्याप्त रूप से विशेषाधिकार प्राप्त नहीं होता है, तो एक्सेस अभी भी अस्वीकार कर दिया जाएगा।

    आरपीएल

    इस का उद्देश्य क्या है के पीछे प्रेरणा? ठीक है, तर्क थोड़ा अब दिनांकित है, लेकिन इंटेल प्रलेखन एक परिदृश्य है कि कुछ इस तरह चला जाता है प्रदान करता है:

    • मान लीजिए ऑपरेटिंग सिस्टम से सिस्टम कॉल है कि एक तार्किक पता स्वीकार करता है (खंड चयनकर्ता + ऑफसेट) प्रदान करता है कॉलर और उस पते पर लिखते हैं
    • सामान्य अनुप्रयोग 3 के सीपीएल के साथ चलते हैं; सिस्टम कॉल 0
    • की एक सीपीएल के साथ चलाने के कुछ खंड मान लीजिए (हम इसे फोन करता हूँ एक्स) 0

    के डीपीएल एक आवेदन आमतौर पर खंड एक्स में स्मृति का उपयोग करने के लिए सक्षम नहीं होगा है (क्योंकि सीपीएल> डीपीएल)। लेकिन सिस्टम कॉल को कैसे कार्यान्वित किया गया था, इस पर निर्भर करता है कि एक एप्लिकेशन सेगमेंट एक्स के भीतर किसी पते के पैरामीटर के साथ सिस्टम कॉल का आह्वान करने में सक्षम हो सकता है। फिर, क्योंकि सिस्टम कॉल विशेषाधिकार प्राप्त है, इसलिए यह सेगमेंट एक्स को लिखने में सक्षम होगा आवेदन केयह ऑपरेटिंग सिस्टम में privilege escalation vulnerability पेश कर सकता है।

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

    फिर

    और अब

    सेगमेंट की सुरक्षा, 286 के साथ पेश किया गया था इससे पहले कि पेजिंग प्रोसेसर के 86 परिवार में ही अस्तित्व में। उसके बाद, उपयोगकर्ता-मोड संदर्भ से कर्नेल मेमोरी तक पहुंच प्रतिबंधित करने का एकमात्र तरीका विभाजन था। आरपीएल ने अलग-अलग विशेषाधिकार स्तरों पर पॉइंटर्स पास करते समय इस प्रतिबंध को लागू करने का एक सुविधाजनक तरीका प्रदान किया।

    आधुनिक ऑपरेटिंग सिस्टम स्मृति तक पहुंच प्रतिबंधित करने के लिए पेजिंग का उपयोग करते हैं, जो विभाजन की आवश्यकता को हटा देता है। चूंकि हमें विभाजन की आवश्यकता नहीं है, इसलिए हम flat memory model का उपयोग कर सकते हैं, जिसका अर्थ है कि सेगमेंट रजिस्ट्रार CS, DS, SS, और ES सभी के पास शून्य का आधार है और संपूर्ण पता स्थान के माध्यम से विस्तारित है। असल में, 64-बिट "लम्बा मोड" में, एक फ्लैट मेमोरी मॉडल लागू किया गया है, उन चार सेगमेंट रजिस्टरों की सामग्री के बावजूद। सेगमेंट का उपयोग कभी-कभी किया जाता है (उदाहरण के लिए, विंडोज FS और GSThread Information Block और 0x23 और 0x33 से switch between 32- and 64-bit code पर इंगित करने के लिए उपयोग करता है, और लिनक्स समान है), लेकिन आप अभी और आसपास के सेगमेंट नहीं जाते हैं। तो आरपीएल ज्यादातर पुराने समय से एक अप्रयुक्त बचे हुए है।

    आरपीएल: क्या यह कभी आवश्यक था?

    आपने पूछा कि डीपीएल और आरपीएल दोनों की आवश्यकता क्यों थी। यहां तक ​​कि 286 के संदर्भ में, यह वास्तव में आवश्यकता आरपीएल होने के लिए नहीं था। उपर्युक्त परिदृश्य को ध्यान में रखते हुए, एक विशेषाधिकार प्राप्त प्रक्रिया हमेशा एलएआर निर्देश के माध्यम से प्रदान किए गए सेगमेंट के डीपीएल को पुनः प्राप्त कर सकती है, कॉलर के विशेषाधिकार से इसकी तुलना करें, और कॉलर का विशेषाधिकार खंड तक पहुंचने के लिए अपर्याप्त है। हालांकि, आरपीएल की स्थापना, मेरी राय में, अलग-अलग विशेषाधिकार स्तरों पर सेगमेंट के प्रबंधन का एक और अधिक सुरुचिपूर्ण और सरल तरीका है।

    विशेषाधिकार स्तर के बारे में और जानने के लिए, Intel's software developer manuals के वॉल्यूम 3 को देखें, विशेष रूप से "विशेषाधिकार स्तर" और "जांच कॉलर एक्सेस विशेषाधिकार" शीर्षक वाले अनुभाग देखें।

    तकनीकी रूप से, डीपीएल के अलग-अलग अर्थ हो सकते हैं कि किस प्रकार के सेगमेंट या गेट का उपयोग किया जा रहा है। सादगी के लिए, जो कुछ भी मैं वर्णन करता हूं वह डेटा सेगमेंट पर लागू होता है। अधिक जानकारी के लिए इंटेल डॉक्स देखें
    उदाहरण के लिए, निर्देश सूचक निर्देशों को प्राप्त करते समय सीएस में संग्रहीत सेगमेंट चयनकर्ता का निहित रूप से उपयोग करता है; डेटा के अधिकांश प्रकार परोक्ष डी एस में संग्रहीत खंड चयनकर्ता, आदि
    का उपयोग accesses ARPL अनुदेश (16-बिट/32-बिट सुरक्षित मोड केवल)

  • +2

    ध्यान दें कि 'arpl' 64 बिट में encodable नहीं है देखें मोड। ओपोड '63' को 'movsxd r64, r/m32' पर पुनर्निर्मित किया गया है। यह आम तौर पर 64 बिट मोड में सेगमेंट कार्यक्षमता के साथ चला जाता है जो काफी सरल हो रहा है। –

    +0

    @ पीटर कॉर्डस ट्रू, मैंने इसका उल्लेख करने के लिए अपना जवाब अपडेट किया।और, अधिक आम तौर पर बोलते हुए, सेगमेंट संरक्षण की प्रयोज्यता आधुनिक ऑपरेटिंग सिस्टम में सीमित है। +1 – user1354557

    +0

    अच्छा अपडेट, लेकिन 32 बिट मोड की तरह 64 बिट मोड का काम करना मुख्य लक्ष्य नहीं है। यह कार्यान्वयन की समानता है जो मुद्दा है। जैसे कि वे निर्देश एन्कोडिंग के साथ बहुत से बुरे फैसलों को तय कर सकते थे ('आर/एम 32' के बजाय' सेट आर/एम 8' 'मेरे पालतू शिखरों में से एक है), उन्होंने चीजों को जितना संभव हो उतना रखा ताकि वे कई लोगों को साझा कर सकें डीकोडर्स और निष्पादन इकाइयों में यथासंभव ट्रांजिस्टर। –