मशीन कोड JITs और निष्पादन बिट को अक्षम करें


10

रनटाइम-जनरेट मशीन-कोड (जैसे कि जेआईटी का आउटपुट) वास्तव में सीपीयू द्वारा निष्पादित किया जाता है यदि सीपीयू / ओएस में एक्सेप्शन डिसएबल बिट है?

जहाँ तक मुझे पता है, कई आधुनिक प्रोसेसर और ऑपरेटिंग सिस्टम एक NX के लिए समर्थन काटा, है, जो रोकता मशीन कोड है कि किसी भी पते पर संग्रहीत किया जाता है (इंटेल और एआरएम सहित) अन्य निष्पादित किया जा रहा से एक संकलित बाइनरी का कोड अनुभाग से। स्पष्ट रूप से, यह एक अच्छा सुरक्षा लाभ है, क्योंकि यह शेल-कोड इंजेक्शन हमलों को रोकता है।

लेकिन एलएलवीएम जैसे जेआईटी इंजन, जो गतिशील रूप से मशीन-कोड उत्पन्न करते हैं, इसके आसपास कैसे मिलते हैं?


मेमोरी के कार्यान्वयन पर एक नज़र डालें :: आवंटित करें यह देखने के लिए कि यह LLVM में कैसे किया जाता है। - 'निक्स' के लिए - विंडोज के लिए
zr01

जवाबों:


6

लिनक्स और कई पॉज़िक्स सिस्टमों पर, एक एप्लिकेशन वर्चुअल मेमोरी में प्रक्रिया एड्रेस स्पेस की कुछ रेंज की सुरक्षा को mmap (2) और mprotect (2) syscalls का उपयोग करके बदल सकता है।

इसलिए JIT इंजन इनका उपयोग कर सकता है ( मशीन कोड के उत्सर्जन से पहले , लेकिन शायद इसके बाद )।

BTW, कुछ आर्किटेक्चर पर, आपको नए उपलब्ध मशीन कोड सेगमेंट, जैसे __builtin_clear_cacheGCC के बारे में सीपीयू कैश को सूचित करना पड़ सकता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.