शायद यह किसी भी तरह स्मृति से संबंधित है? क्या होगा
sudo cat /dev/urandom > /dev/mem
करना? सभी रैम कचरा? सभी गैर-कर्नेल वर्चुअल मेमोरी? इनमे से कोई भी नहीं?
शायद यह किसी भी तरह स्मृति से संबंधित है? क्या होगा
sudo cat /dev/urandom > /dev/mem
करना? सभी रैम कचरा? सभी गैर-कर्नेल वर्चुअल मेमोरी? इनमे से कोई भी नहीं?
जवाबों:
यह सिस्टम की भौतिक मेमोरी तक पहुंच प्रदान करता है।
mem(4)
आदमी पेज के बारे में और बताते /dev/mem
है।
हां - यह सभी प्रकार की समस्याओं का कारण बन सकता है। एक रिबूट आपको ठीक करना चाहिए, लेकिन बुरी चीजें बहुत आसानी से हो सकती हैं। सावधान रहे! :-)
sudo cat /dev/urandom > /dev/mem
कुछ भी नहीं करेगा, क्योंकि सूडो बिल्ली के विशेषाधिकार को बढ़ाएंगे, लेकिन पुनर्निर्देशित नहीं। आप या तो कर सकते हैं sudo su
और फिर रूट शेल में काम कर सकते हैं , या उपयोग कर सकते हैं
sudo dd if=/dev/urandom of=/dev/mem
/dev/mem
सिस्टम में भौतिक मेमोरी, अर्थात सभी रैम तक पहुंच प्रदान करता है, हालांकि इसका मतलब यह नहीं है कि यह आपको रैम के लिए पूर्ण रीड / राइट एक्सेस प्रदान करता है ( इस दस्तावेज़ में CONFIG_STRICT_DEVMEM विकल्प देखें )। यह भी ध्यान दें कि भौतिक मेमोरी के कुछ क्षेत्रों में अन्य डिवाइस जैसे वीडियो कार्ड मेमोरी आदि होंगे, जो उस पर मैप किए गए हैं।
आँख बंद करके लिखने से /dev/mem
अनिश्चित व्यवहार होगा, यहाँ एक यूट्यूब वीडियो ऐसा ही कर रहा है।
इसके साथ परीक्षण करें 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 पर डिफ़ॉल्ट रूप से सेट)nopat
x86 के लिए कर्नेल कमांड लाइन विकल्प पास करेंIO पोर्ट अभी भी उन लोगों के बिना काम करते हैं।
कैश फ्लशिंग
यदि आप एक रजिस्टर के बजाय रैम को लिखने की कोशिश करते हैं, तो मेमोरी सीपीयू द्वारा कैश की जा सकती है: 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
devmem2
रजिस्टर में लिखने के लिए उपयोग करेंprintf
प्रतिक्रिया में आभासी डिवाइस से बाहर आते हैं/ देव / मेम पारंपरिक रूप से पूरे भौतिक पता स्थान तक पहुंच प्रदान करते हैं। इसमें ram शामिल है लेकिन इसमें कोई मेमोरी मैप्ड IO डिवाइस भी शामिल है।
कई आधुनिक कर्नेल को "CONFIG_STRICT_DEVMEM" के साथ कॉन्फ़िगर किया जाएगा जो केवल मैप किए गए IO उपकरणों के लिए / dev / mem को प्रतिबंधित करता है।
इसके लिए बेतरतीब कचरा लिखना एक बुरा विचार है लेकिन वास्तव में जो बुरा होगा वह भविष्यवाणी करना गलत है। हार्डवेयर अप्रत्याशित कचरा करने के लिए अप्रत्याशित तरीके से प्रतिक्रिया कर सकते हैं, दूषित कर्नेल मेमोरी संरचनाएं अप्रत्याशित कर्नेल व्यवहार का कारण बन सकती हैं। सबसे अच्छी तरह से मैं एक सिस्टम क्रैश की उम्मीद करूंगा, सबसे खराब डेटा भ्रष्टाचार या यहां तक कि हार्डवेयर ब्रिकिंग भी इस सवाल से बाहर नहीं है।
PS ध्यान दें कि सामान्य उपयोगकर्ता के रूप में चलने पर आपकी कमांड कुछ भी नहीं होनी चाहिए, क्योंकि sudo केवल कैट कमांड को हटाती है, न कि रीडायरेक्ट।
dd if=/dev/urandom of=/dev/kmem bs=1 count=1 seek=$RANDOM