2012-04-28 10 views
5

आइए कहें कि मेमोरी पता 0A7F03E4 एक मान 124 स्टोर करता है। इसे Python का उपयोग करके 300 में कैसे बदलें? क्या इस तरह के कार्य के लिए एक मॉड्यूल प्रदान किया गया है?मेमोरी एड्रेस में संग्रहीत मूल्य को कैसे बदला जाए?

+1

आपको स्मृति सुरक्षा से निपटने की आवश्यकता हो सकती है। यदि यह कोड है या केवल डेटा पढ़ता है तो आप उस पते पर लिखने में सक्षम नहीं होंगे। –

+0

क्या आप वर्चुअल मेमोरी एड्रेस या भौतिक मेमोरी एड्रेस के बारे में बात कर रहे हैं? –

उत्तर

8
>>> import ctypes 
>>> memfield = (ctypes.c_char).from_address(0x0A7F03E4) 

अब आप मेमफील्ड पढ़ सकते हैं, इसे असाइन कर सकते हैं, जो भी आप चाहते हैं। जब तक आपके पास उस स्मृति स्थान तक पहुंच हो, तब तक।

आप भी

>>> memarray = (ctypes.c_char*memoryfieldlen).from_address(0x0A7F03E4) 

जो आप memfields की एक सूची देता है के साथ एक memarray मिल सकती है।

अपडेट: मैंने अभी पढ़ा है कि आप एक पूर्णांक पुनर्प्राप्त करना चाहते हैं। इस मामले में, निश्चित रूप से ctypes.c_int का उपयोग करें। सामान्य में: आप भौतिक स्मृति का उपयोग करने के /dev/mem डिवाइस open() करने की कोशिश कर सकते हैं)

+0

क्या यह आपको भौतिक पते की बजाय पायथन प्रक्रिया का वर्चुअल मेमोरी पता नहीं देगा? उत्तरार्द्ध शायद ऑपरेटिंग सिस्टम और प्रक्रिया विशेषाधिकारों के आधार पर अव्यवस्थित होगा। –

+0

जब आप एक गैर-डेटा-फ़ील्ड, या पहुंच योग्य मेमोरी के बाहर एक फ़ील्ड तक पहुंचना चाहते हैं, तो आपको निश्चित रूप से एक सेगफॉल्ट मिलेगा। – ch3ka

1

क्या आपने निर्मित सीटीपीएस मॉड्यूल की कोशिश की है? यह एक मेमसेट फ़ंक्शन प्रदान करता है जो आपको चाहिए जो आपको चाहिए।

1

यूनिक्स पर, है, और फिर file वस्तु की seek() विधि का उपयोग सही स्थान पर फ़ाइल सूचक सेट उचित CTYPE का उपयोग करें। फिर मूल्य बदलने के लिए write() विधि का उपयोग करें। कच्ची स्ट्रिंग के रूप में संख्या को एन्कोड करना न भूलें!

आम तौर पर, केवल root उपयोगकर्ता के पास इस डिवाइस तक पहुंच है, हालांकि।

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