2013-04-05 12 views
7

कभी-कभी, जब हमें कर्नेल सिस्टम में सिस्टम कॉल कॉल करना होता है, तो हम इसके सहायक या संबंधित कर्नेल फ़ंक्शन का आह्वान करते हैं, इसके बजाय 'syscall' करते हैं। मैं अभी भी सोच रहा हूं कि क्या हम कर्नेल स्पेस में सिस्टम कॉल को कॉल कर सकते हैं? यदि नहीं, तो हम उसे क्या रोकते हैं।क्या हम कर्नेल स्पेस में सिस्टम कॉल को कॉल कर सकते हैं?

मेरा प्रश्न थोड़ा अजीब है।

+0

नहीं आप नहीं कर सकते। एक सिस्टम कॉल परिभाषा के अनुसार है कर्नेल और उपयोगकर्तालैंड –

+0

के बीच अंतरफलक मुझे पता था। हम जो करते हैं वह सहायक या अन्य कार्यों को कॉल करता है। मैं सिर्फ उत्सुक हूं कि हम इसे बना सकते हैं या नहीं। – liuyruc

+0

और एक सिस्टम कॉल शायद शेड्यूलिंग पॉइंट भी है; इसलिए आप कर्नेल में मनमाने ढंग से अपने कार्य को कॉल नहीं करना चाहते हैं। सामान्य रूप से, कर्नेल कोडिंग बहुत मुश्किल है। आपको और अधिक समझाना चाहिए कि आप यह क्यों करना चाहते हैं .... –

उत्तर

9

वास्तव में, आम धारणा (और कुछ जवाब यहां), जवाब है, हाँ, आप, लेकिन आधार पर कर सकते हैं जो ओएस पर के विपरीत:

  • लिनक्स में, आप लगभग सभी प्रणाली अगर कॉल कॉल कर सकते हैं आप उनके कर्नेल निर्यात को ढूंढ सकते हैं (उदाहरण के लिए "cat/proc/kallsysms | grep sys_" करें)। डेटा सेगमेंट (KERNEL_DS) सेट करके, अधिकांश सिस्को (जो उपयोगकर्ता मोड * स्वीकार करते हैं) में सुरक्षा के आसपास एक मामूली "चाल" है। यह बिल्कुल अनुशंसित नहीं है, लेकिन अगर आपको कर्नेल (उदा। SELinux) से फ़ाइलों तक पहुंचने की आवश्यकता है तो निश्चित रूप से समझ में आता है।

  • विंडोज़ में, कर्नेल में अधिकांश एनटी * कॉल ज़ेड * कॉल के रूप में भी उपलब्ध हैं - डंपबिन/निर्यात सी: \ विंडोज \ system32 \ ntoskrnl.exe | findstr Zw (या Nt) "के लिए उदाहरण।

  • मैक ओएस एक्स में, तकनीकी रूप से इसकी अनुमति नहीं दी जानी चाहिए, हालांकि इसके आसपास जाने के लिए चालाक हैक हैं। लेकिन चेतावनियां से सावधान पालन के माध्यम से -

हालांकि सिस्टम कॉल वास्तव में उपयोगकर्ता मोड और कर्नेल के बीच इंटरफेस हैं, वहाँ आश्चर्यजनक रूप से काफी कुछ मामलों में जहां भी उत्पादन योग्य कोड ऐसा नहीं करता है कर रहे हैं।

+1

हालांकि, जब मैं insmod करता हूं, यह "अज्ञात प्रतीक sys_socket" शिकायत करता है। –

+0

ऐसा इसलिए हो सकता है क्योंकि प्रतीक केवल जीपीएल है। लिनक्स कुछ समय की तरह है। ऊपर से बिल्ली/grep आज़माएं, और यदि आप निर्यात किए गए प्रतीक को देखते हैं (टी), और अभी भी इससे लिंक नहीं कर सकते हैं, तो इसकी संभावना है। सभी syscalls आवश्यक रूप से निर्यात नहीं कर रहे हैं। विशेष रूप से सॉकेट के साथ अन्य मुद्दे भी हैं, लेकिन जटिल नहीं हैं - पहले कोशिश करें – Technologeeks

संबंधित मुद्दे