लिनक्स (या सोलारिस) पर /proc/self/maps
हाथ से पार्सिंग से बेहतर तरीका है यह पता लगाने के लिए कि क्या आप स्मृति में एक या अधिक पते पर संग्रहीत, पढ़ या निष्पादित कर सकते हैं?मेमोरी सुरक्षा को समझने के लिए पार्सिंग/proc/self/maps से बेहतर तरीका है?
उदाहरण के लिए, विंडोज़ में आपके पास VirtualQuery
है।
लिनक्स में, मैं उन मानों को बदलने के लिए mprotect
कर सकता हूं, लेकिन मैं उन्हें वापस नहीं पढ़ सकता।
इसके अलावा, वहाँ किसी भी तरह से पता करने के लिए जब उन अनुमतियों को बदलने है (उदाहरण के लिए जब कोई मेरे पीठ के पीछे एक फ़ाइल पर mmap
उपयोग करता है) कुछ बहुत आक्रामक कर रहे हैं और इस प्रक्रिया में सभी धागे पर ptrace
का उपयोग करने और बनाने के लिए किसी भी प्रयास में अवरोध डालने के अलावा अन्य syscall
जो मेमोरी मैप को प्रभावित कर सकता है?
अद्यतन:
दुर्भाग्य से, मैं एक JIT कोड यह क्या स्थिर है की एक सन्निकटन प्राप्त करने के लिए निष्पादित हो रहा है के बारे में बहुत कम जानकारी है कि इस के अंदर उपयोग कर रहा हूँ। हां, मुझे एहसास है कि मेरे पास लिनक्स द्वारा उपयोग किए गए बनामस्केल पेज की तरह म्यूटेबल डेटा का निरंतर मानचित्र हो सकता है। I सुरक्षित रूप से एक धारणा पर वापस आ सकता है कि प्रारंभिक पार्स में शामिल नहीं किया गया कुछ भी परिवर्तनीय और खतरनाक है, लेकिन मैं उस विकल्प से पूरी तरह से खुश नहीं हूं।
अभी मैं क्या करता हूं मैं /proc/self/maps
पढ़ता हूं और एक संरचना का निर्माण करता हूं, मैं किसी दिए गए पते की सुरक्षा के लिए बाइनरी खोज कर सकता हूं। किसी भी समय मुझे किसी ऐसे पृष्ठ के बारे में कुछ जानने की ज़रूरत है जो मेरी संरचना में नहीं है, मैं इसे पढ़ता/proc/self/maps मानता हूं कि यह उस दौरान जोड़ा गया है या मैं किसी भी तरह से segfault करने वाला होगा।
ऐसा लगता है कि इस जानकारी को पाने के लिए पाठ को पार्स करना और यह नहीं जानना कि यह कब बदलता है वह बहुत क्रूर है। (/dev/inotify
/proc
में बहुत कुछ भी काम नहीं करता है)
समय तक मुझे एसआईजीएसईजीवी बहुत देर हो चुकी है। मुझे यह जानने की ज़रूरत है कि कुछ डेटा यह जानने के लिए निरंतर है कि मैं इसके माध्यम से लगातार "सुरक्षित" हो सकता हूं। स्थिर mmap'ed गैर-निरंतर डेटा और बनामस्कूल पृष्ठ के लिए उचित हैक्स के साथ। –