2012-06-11 10 views
10

मैं एक बंद स्रोत 3 पार्टी कार्यक्रम में एक कार्यक्रम से स्मृति का उपयोग करते हैं, और मुझे पता है कि स्मृति मैं किसी दूसरे

  • पहुँच कि स्मृति कार्यक्रम के लिए आवंटित किया जाता है

    • करने में सक्षम होना चाहता हूँ (पढ़ने के लिए ठीक है)

    उपयोगिताएँ vmmap की तरह (1), ढेर (1), और लीक (1) मैं क्या जरूरत के लिए इसी तरह की सुविधा है लगता है, लेकिन मैं उनके स्रोत कहीं भी नहीं मिल सकता है (ओएस एक्स संस्करण) और यह पता नहीं लगा सकता कि वे कैसे काम करते हैं। अधिमानतः, यह सब उपयोगकर्ता-स्थान में किया जाएगा, संभवतः रूट के रूप में चल रहा है, अगर मैं इससे बच सकता हूं तो मैं स्मृति सुरक्षा को बाईपास करने के उद्देश्य से कर्नेल कोड लिखना नहीं चाहता हूं।

    मैंने शॉर्ट (2) के दूसरे तर्क के रूप में जो पढ़ना है, उसके पते को पारित करने वाली साझा स्मृति का उपयोग करने का प्रयास किया, लेकिन यह अंततः असफल रहा (और शायद इसका इच्छित उपयोग और/या खराब अभ्यास नहीं) और अभी भी मुझे छोड़ दिया यह निर्धारित करने के लिए कि मैं किस स्मृति को वैसे भी ढूंढ रहा हूं (जिस प्रोग्राम में स्मृति का स्वामित्व था, उसे मेरे पते की रिपोर्ट करनी थी)।

    क्या किसी निश्चित प्रोग्राम के लिए मेमोरी सुरक्षा को अक्षम करने का कोई तरीका है ताकि जब यह एक अलग प्रक्रिया को आवंटित स्मृति को पढ़ने/लिखने का प्रयास करे तो यह segfault नहीं होगा? क्या कोई बेहतर तरीका है जो मेरी पूरी प्रणाली को गंभीर रूप से भ्रष्ट करने के लिए बग को सक्षम नहीं करेगा?

    यह कैसे प्राप्त किया जाता है?

  • +0

    क्या आपने ऐसी उपयोगिताओं की सिस्टम कॉल का पता लगाने का प्रयास किया है? – icktoofay

    +0

    @icktoofay अच्छा विचार। पहले कभी नहीं किया। मैंने अभी शार्क.एप (अस्थिर गुई बकवास, केवल पहला सुझाव Google पाया है) का उपयोग करने की कोशिश की लेकिन कुछ समस्याएं हैं 1) प्रतीक नाम गायब हैं 2) शार्क दुर्घटनाग्रस्त रहता है (मैं यह देखने की कोशिश करने जा रहा हूं कि मैं कर सकता हूं या नहीं जीडीबी या कुछ के साथ ऐसा करें), और 3) मुझे उन सिस्कोल के लिए प्रलेखन नहीं मिल रहा है जो दिखते हैं कि वे प्रासंगिक हो सकते हैं (io_connect_method, io_connect_ (un) map_memory, कुछ mach_ * सामान)। 4) यह मुझे हमेशा डंप के माध्यम से खोदने के लिए ले जाएगा और यह पता लगाएगा कि इन कॉलों का सही तरीके से उपयोग कैसे करें। कहीं दस्तावेज होना चाहिए ... – user992364

    उत्तर

    3

    मैं एक ओएस एक्स मशीन के लिए पहुँच नहीं है, लेकिन यह बहुत ही तुम क्या करने की कोशिश कर रहे हैं क्या जैसा दिखता है:

    Reading Other Process' Memory in OS X?

    यहाँ लिंक है कि काम नहीं करता है का एक संग्रह है :

    http://web.archive.org/web/20090627062246/http://www.matasano.com/log/1100/what-ive-been-doing-on-my-summer-vacation-or-it-has-to-work-otherwise-gdb-wouldnt/

    +0

    यह आलेख "ptrace काम नहीं करेगा, vm_read और vm_write का उपयोग करें" तक उबालता प्रतीत होता है, जिनमें से कोई भी मैनपेज नहीं है, और समान दिखने वाले डंप में एकमात्र सिस्कल vm_deallocate है ... :( – user992364

    3

    असल में, this guy सही है।

    पर जाएं this book के साथ और कार्य कार्यान्वयन के लिए उदाहरण 8-16 के vm_rw_master.c देखें।

    प्रलेखन के लिए http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/ देखें, यह थोड़ा पुराना है, और संदिग्ध रूप से सही है, लेकिन यह सबसे अच्छा उपलब्ध है।

    संपादित करें: इसके अलावा, http://lightbulbone.com/2011/05/dumping-process-memory-on-mac-os-x/ देखें (ध्यान दें कि जिस कार्य को आप पढ़ने की कोशिश कर रहे हैं उसका मालिक है, पढ़ने की कोशिश करने की प्रक्रिया के बच्चे होने की आवश्यकता नहीं है, आपको केवल उचित प्रमाणीकरण की आवश्यकता है।)

    संपादित करें: प्राधिकरण के एक अच्छे उदाहरण के लिए http://os-tres.net/blog/2010/02/17/mac-os-x-and-task-for-pid-mach-call/ देखें।

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