मैं समझता हूं कि उपयोगकर्ता कॉल में अस्वीकृत क्षमताओं तक पहुंच प्रदान करने के लिए सिस्टम कॉल मौजूद हैं, जैसे read()
सिस्टम कॉल का उपयोग करके एचडीडी तक पहुंच। मैं यह भी समझता हूं कि हार्डवेयर में संगतता प्रदान करने के लिए इन्हें fread()
जैसे लाइब्रेरी कॉल के रूप में उपयोगकर्ता-मोड परत द्वारा सारणीबद्ध किया जाता है।लिनक्स सिस्टम कॉल और कर्नेल मोड
तो एप्लिकेशन डेवलपर्स के दृष्टिकोण से, हमारे पास कुछ जैसा है;
//library //syscall //k_driver //device_driver
fread() -> read() -> k_read() -> d_read()
मेरा प्रश्न है; मुझे fread()
और read()
फ़ंक्शंस में सीधे मेरे प्रोग्राम में सभी निर्देशों को रेखांकित करने में क्या रोक रहा है? निर्देश वही हैं, इसलिए सीपीयू को वैसे ही व्यवहार करना चाहिए? मैंने कोशिश नहीं की है, लेकिन मुझे लगता है कि यह किसी कारण से काम नहीं करता है, मुझे याद आ रही है। अन्यथा कोई भी अनुप्रयोग मनमाने ढंग से कर्नेल मोड ऑपरेशन प्राप्त कर सकता है।
टीएल; डीआर: क्या सिस्टम को कर्नेल मोड में 'प्रवेश' करने की अनुमति देता है जो किसी एप्लिकेशन द्वारा कॉपी-सक्षम नहीं है?
अहह तो यह स्मृति मैपिंग, दिलचस्प के लिए नीचे आता है। धन्यवाद, पढ़ने के लिए कुछ और। – lynks
उपयोगकर्ता मोड (उत्तर अपडेट) में वर्जित किए गए विशेषाधिकार प्राप्त निर्देशों का उल्लेख नहीं करना चाहिए। – jlliagre
हम्म, मैं अभी भी नहीं कैसे स्विच होता है पर स्पष्ट कर रहा हूँ, और क्यों मैं निष्पादित नहीं कर सकता 'स्विच निर्देश' मैन्युअल: '<*switch*>' अगर मैं वह सब inlined कहते हैं, एक shellcode, मुझे कर्नेल-मोड निष्पादन क्यों नहीं मिलता है? –
lynks