क्या है / देव / मेम?


40

शायद यह किसी भी तरह स्मृति से संबंधित है? क्या होगा

sudo cat /dev/urandom > /dev/mem

करना? सभी रैम कचरा? सभी गैर-कर्नेल वर्चुअल मेमोरी? इनमे से कोई भी नहीं?


2
इसे भी देखें:dd if=/dev/urandom of=/dev/kmem bs=1 count=1 seek=$RANDOM
user3490

6
क्या स्मृति सुरक्षा को सभी प्रक्रियाओं के लिए भौतिक रैम तक पहुंच को रोकना नहीं चाहिए, सिवाय एक के जो राम के उस क्षेत्र को सौंपा गया है? या सुडोल उस सुरक्षा को ओवरराइड करता है?
मैथ्यू लॉक

जवाबों:


32

यह सिस्टम की भौतिक मेमोरी तक पहुंच प्रदान करता है।

mem(4)आदमी पेज के बारे में और बताते /dev/memहै।

हां - यह सभी प्रकार की समस्याओं का कारण बन सकता है। एक रिबूट आपको ठीक करना चाहिए, लेकिन बुरी चीजें बहुत आसानी से हो सकती हैं। सावधान रहे! :-)


4
मैं मेम मैन पेज की समीक्षा करने का सुझाव दूंगा। लत्ता सही है। "मेम एक कैरेक्टर डिवाइस फाइल है जो कंप्यूटर की मुख्य मेमोरी की एक छवि है। इसका उपयोग उदाहरण के लिए, (और यहां तक ​​कि पैच) सिस्टम को जांचने के लिए किया जा सकता है। बाइट के पते को भौतिक मेमोरी एड्रेस के रूप में व्याख्या किया जाता है।" और ... "फ़ाइल किमीम मेम के समान है, सिवाय इसके कि भौतिक मेमोरी के बजाय कर्नेल वर्चुअल मेमोरी एक्सेस की जाती है।"
मिस्टर शिखाडांस

@Andrew Flanagan: आपका लिंक अब दिखाता है कि समय कमांड का उपयोग करके कोई स्टॉपवॉच कैसे सेट कर सकता है।
अयियन.प्रेम

1
@ Aiyion.Prime। धन्यवाद - एक आर्काइव.ऑर्ग संस्करण की ओर इशारा किया।
एंड्रयू फ्लानगन

19

/ dev / mem सिस्टम की भौतिक मेमोरी तक पहुँच प्रदान करता है , वर्चुअल मेमोरी नहीं। Kernels वर्चुअल एड्रेस स्पेस / dev / kmem का उपयोग करके पहुँचा जा सकता है।

यह मुख्य रूप से परिधीय हार्डवेयर से संबंधित IO मेमोरी पतों को एक्सेस करने के लिए उपयोग किया जाता है, जैसे वीडियो एडेप्टर।


9

sudo cat /dev/urandom > /dev/memकुछ भी नहीं करेगा, क्योंकि सूडो बिल्ली के विशेषाधिकार को बढ़ाएंगे, लेकिन पुनर्निर्देशित नहीं। आप या तो कर सकते हैं sudo suऔर फिर रूट शेल में काम कर सकते हैं , या उपयोग कर सकते हैं
sudo dd if=/dev/urandom of=/dev/mem

/dev/memसिस्टम में भौतिक मेमोरी, अर्थात सभी रैम तक पहुंच प्रदान करता है, हालांकि इसका मतलब यह नहीं है कि यह आपको रैम के लिए पूर्ण रीड / राइट एक्सेस प्रदान करता है ( इस दस्तावेज़ में CONFIG_STRICT_DEVMEM विकल्प देखें )। यह भी ध्यान दें कि भौतिक मेमोरी के कुछ क्षेत्रों में अन्य डिवाइस जैसे वीडियो कार्ड मेमोरी आदि होंगे, जो उस पर मैप किए गए हैं।

आँख बंद करके लिखने से /dev/memअनिश्चित व्यवहार होगा, यहाँ एक यूट्यूब वीडियो ऐसा ही कर रहा है।


7

इसके साथ परीक्षण करें busybox devmem

busybox devmemएक छोटा सीएलआई उपयोगिता है जो मिमीप है /dev/mem

आप इसे उबंटू में प्राप्त कर सकते हैं: sudo apt-get install busybox

भौतिक पते से 4 बाइट्स पढ़ें 0x12345678:

sudo busybox devmem 0x12345678

0x9abcdef0उस पते पर लिखें :

sudo busybox devmem 0x12345678 w 0x9abcdef0

स्रोत: https://github.com/mirror/busybox/blob/1_27_2/miscutils/devmem.c#L85

MAP_SHARED

जब /dev/memआप मानचित्रण करते हैं , तो आप उपयोग करना चाहते हैं:

open("/dev/mem", O_RDWR | O_SYNC);
mmap(..., PROT_READ | PROT_WRITE, MAP_SHARED, ...)

MAP_SHARED लिखते हैं कि फिजिकल मेमोरी में तुरंत चला जाता है, जिससे अवलोकन करना आसान हो जाता है, और हार्डवेयर रजिस्टर के लिए अधिक समझ में आता है।

CONFIG_STRICT_DEVMEM तथा nopat

/dev/memकर्नेल v4.9 पर नियमित रूप से रैम को देखने और संशोधित करने के लिए , आपको मुट्ठी मारनी होगी:

  • अक्षम करें CONFIG_STRICT_DEVMEM(Ubuntu 17.04 पर डिफ़ॉल्ट रूप से सेट)
  • nopatx86 के लिए कर्नेल कमांड लाइन विकल्प पास करें

IO पोर्ट अभी भी उन लोगों के बिना काम करते हैं।

इसे भी देखें: https://stackoverflow.com/questions/39134990/mmap-of-dev-mem-fails-with-invalid-argument-for-virt-to-phys-address-but-addre/45127582#45127582

कैश फ्लशिंग

यदि आप एक रजिस्टर के बजाय रैम को लिखने की कोशिश करते हैं, तो मेमोरी सीपीयू द्वारा कैश की जा सकती है: https://stackoverflow.com/questions/22701352/how-to-flush-the-cpu-cache-for-a-region -ऑफ-एड्रेस-स्पेस-इन-लाइनक्स और मुझे इसे फ्लश करने या क्षेत्र को चिह्नित करने के लिए बहुत पोर्टेबल / आसान तरीका नहीं दिखता है:

तो शायद /dev/memडिवाइस के लिए मेमोरी बफ़र्स पास करने के लिए मज़बूती से उपयोग नहीं किया जा सकता है?

यह QEMU में दुर्भाग्य से नहीं देखा जा सकता है, क्योंकि QEMU कैश का अनुकरण नहीं करता है।

इसका परीक्षण कैसे करें

अब मज़ेदार हिस्से के लिए। यहाँ कुछ शांत सेटअप हैं:

  • उपयोगकर्ता की स्मृति
    • volatileउपयोगकर्ता-संबंधी प्रक्रिया पर चर आवंटित करें
    • /proc/<pid>/maps+ के साथ भौतिक पता प्राप्त करें/proc/<pid>/pagemap
    • के साथ भौतिक पता devmem2, और घड़ी उपयोगकर्ता की प्रक्रिया प्रतिक्रिया:
  • कर्नेलैंड मेमोरी
    • साथ कर्नेल मेमोरी आवंटित करें kmalloc
    • के साथ भौतिक पता प्राप्त करें virt_to_physऔर इसे उपयोगकर्तालैंड में वापस भेजें
    • के साथ भौतिक पते को संशोधित करें devmem2
    • कर्नेल मॉड्यूल से मान क्वेरी करें
  • IO मेम और QEMU वर्चुअल प्लेटफॉर्म डिवाइस
    • ज्ञात भौतिक रजिस्टर पतों के साथ एक मंच डिवाइस बनाएं
    • devmem2रजिस्टर में लिखने के लिए उपयोग करें
    • घड़ी की printfप्रतिक्रिया में आभासी डिवाइस से बाहर आते हैं

5

/ देव / मेम पारंपरिक रूप से पूरे भौतिक पता स्थान तक पहुंच प्रदान करते हैं। इसमें ram शामिल है लेकिन इसमें कोई मेमोरी मैप्ड IO डिवाइस भी शामिल है।

कई आधुनिक कर्नेल को "CONFIG_STRICT_DEVMEM" के साथ कॉन्फ़िगर किया जाएगा जो केवल मैप किए गए IO उपकरणों के लिए / dev / mem को प्रतिबंधित करता है।

इसके लिए बेतरतीब कचरा लिखना एक बुरा विचार है लेकिन वास्तव में जो बुरा होगा वह भविष्यवाणी करना गलत है। हार्डवेयर अप्रत्याशित कचरा करने के लिए अप्रत्याशित तरीके से प्रतिक्रिया कर सकते हैं, दूषित कर्नेल मेमोरी संरचनाएं अप्रत्याशित कर्नेल व्यवहार का कारण बन सकती हैं। सबसे अच्छी तरह से मैं एक सिस्टम क्रैश की उम्मीद करूंगा, सबसे खराब डेटा भ्रष्टाचार या यहां तक ​​कि हार्डवेयर ब्रिकिंग भी इस सवाल से बाहर नहीं है।

PS ध्यान दें कि सामान्य उपयोगकर्ता के रूप में चलने पर आपकी कमांड कुछ भी नहीं होनी चाहिए, क्योंकि sudo केवल कैट कमांड को हटाती है, न कि रीडायरेक्ट।

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