मुझे सामान्य लिस्प में x86-64 के लिए किसी प्रकार का ring0 कर्नेल-मोड डीबगर विकसित करने में दिलचस्पी है जो कि लिनक्स कर्नेल मॉड्यूल के रूप में लोड किया जाएगा और जैसा कि मैं सामान्य प्रोग्रामिंग में सामान्य लिस्प को सी पसंद करता हूं, मुझे आश्चर्य है कि सामान्य लिस्प कार्यान्वयन इस प्रकार के प्रोग्रामिंग कार्य में फिट होगा।क्या सामान्य लिस्प में इंटेल x86-64 के लिए लिनक्स कर्नेल-मोड डीबगर लिखना व्यवहार्य है, और जिसके साथ आम लिस्प कार्यान्वयन है?
डीबगर कुछ बाहरी डिस्सेबलिंग लाइब्रेरी का उपयोग करेगा, जैसे udis86 कुछ FFI के माध्यम से। ऐसा लगता है कि सी में कर्नेल मॉड्यूल लिखना सबसे आसान है क्योंकि उन्हें सी फ़ंक्शन int init_module(void)
और void cleanup_module(void)
(The Linux Kernel Module Programming Guide) शामिल करने की आवश्यकता है, इसलिए कर्नेल-लैंड मॉड्यूल कोड CFFI का उपयोग करके सामान्य लिस्प कोड को सी से कॉल करेगा। विचार Rasta Ring 0 Debugger के विचार से प्रेरित 64-बिट लिनक्स के लिए एक रिंग 0 डीबगर बनाना होगा, जो केवल 32-बिट लिनक्स के लिए उपलब्ध है और पीएस/2 कीबोर्ड की आवश्यकता है। मुझे लगता है कि सबसे चुनौतीपूर्ण हिस्सा हार्डवेयर और सॉफ़्टवेयर ब्रेकपॉइंट्स और निम्न-स्तरीय वीडियो, कीबोर्ड या यूएसबी इनपुट डिवाइस हैंडलिंग के साथ वास्तविक डीबगर कोड होगा। इनलाइन असेंबली में बहुत मदद मिलेगी, ऐसा लगता है कि एसबीसीएल इनलाइन असेंबली में वीओपी (SBCL Internals: VOP) (SBCL Internals: Adding VOPs) का उपयोग करके कार्यान्वित किया जा सकता है, और यह IRC log उल्लेख करता है कि एसीएल (एलेग्रो कॉमन लिस्प), CCL (Clozure Common Lisp) और कॉर्मनसीएल में एलएपी (लिस्प विधानसभा कार्यक्रम)। एसीएल और कॉर्मनसीएल दोनों स्वामित्व हैं और इस प्रकार त्याग दिए जाते हैं, लेकिन सीसीएल (क्लोजर कॉमन लिस्प) एक विकल्प हो सकता है। स्टैंडअलोन निष्पादन योग्य बनाने की क्षमता भी एक आवश्यकता है; एसबीसीएल जो मैं वर्तमान में उपयोग कर रहा हूं, यह है, लेकिन चूंकि वे पूरी लिस्प छवियां हैं, उनका आकार काफी बड़ा है।
मेरा प्रश्न है: यह व्यवहार्य कॉमन लिस्प में इंटेल x86-64 के लिए एक ring0 कर्नेल-मोड डिबगर, सी और/या विधानसभा में लागू निम्न स्तर के कोड के साथ बनाने के लिए है, और यह है अगर है, जो आम इस प्रकार के प्रयास के लिए 64-बिट लिनक्स के सर्वोत्तम सूट के लिए लिस्प कार्यान्वयन, और यदि एक से अधिक उपयुक्त आम लिस्प कार्यान्वयन हैं तो पेशेवर और विपक्ष क्या हैं? योजना एक संभावित विकल्प भी हो सकती है, अगर यह आम लिस्प पर कुछ लाभ प्रदान करती है। मुझे अच्छी तरह से पता है कि कर्नेल मॉड्यूल का अधिकांश बहुमत सी में लिखा गया है, और मुझे सी और x86 असेंबली पता है कि सी और/या असेंबली में आवश्यक निम्न-स्तर कोड लिखने में सक्षम होना पर्याप्त है। यह लिनक्स में लिनक्स कर्नेल को पोर्ट करने का प्रयास नहीं है (देखें: https://stackoverflow.com/questions/1848029/why-not-port-linux-kernel-to-common-lisp), लेकिन लिनक्स कर्नेल मॉड्यूल को सामान्य लिस्प में लिखने की योजना है जिसे रिंग 0 डीबगर के रूप में उपयोग किया जाएगा।
यह समय लगता होगा "आप शायद एक उपयोगकर्ता प्रक्रिया में तुतलाना हिस्सा चला सकते हैं और सिर्फ डीबगर से तो उससे संपर्क -
इसके अलावा, मैं पूरी तरह से खत्म हो गया असली कठिनाई एक डिबगर लिखित रूप में glossing कर रहा हूँ।। प्राप्त करने के लिए बहुत आसान होना चाहिए। –
@AlexeyFrunze यह एक अच्छा विचार हो सकता है, शायद चीजों को बहुत आसान बनाता है। – nrz
एक डाउनवोट, एक अपवॉट। मुझे पता होना चाहिए कि डाउनवोट क्यों? – nrz