সম্ভবত এটি কোনওভাবে স্মৃতির সাথে সম্পর্কিত? কি হবে
sudo cat /dev/urandom > /dev/mem
না? সমস্ত র্যাম ট্র্যাশ করবেন? সমস্ত নন-কার্নেল ভার্চুয়াল মেমরি? উপরের কেউই না?
সম্ভবত এটি কোনওভাবে স্মৃতির সাথে সম্পর্কিত? কি হবে
sudo cat /dev/urandom > /dev/mem
না? সমস্ত র্যাম ট্র্যাশ করবেন? সমস্ত নন-কার্নেল ভার্চুয়াল মেমরি? উপরের কেউই না?
উত্তর:
এটি সিস্টেমের শারীরিক স্মৃতিতে অ্যাক্সেস সরবরাহ করে।
mem(4)Man পৃষ্ঠা তার সম্পর্কে আরো ব্যাখ্যা করে /dev/memহয়।
হ্যাঁ - এটি সমস্ত ধরণের সমস্যার কারণ হতে পারে। একটি রিবুট আপনাকে ঠিক করা উচিত, তবে খারাপ জিনিস খুব সহজেই ঘটতে পারে। সাবধান হও! :-)
/ dev / mem ভার্চুয়াল মেমরির পরিবর্তে সিস্টেমের শারীরিক স্মৃতিতে অ্যাক্সেস সরবরাহ করে । কার্নেলগুলি ভার্চুয়াল ঠিকানার স্থান / dev / kmem ব্যবহার করে অ্যাক্সেস করা যায়।
এটি প্রাথমিকভাবে ভিডিও অ্যাডাপ্টারগুলির মতো পেরিফেরিয়াল হার্ডওয়্যার সম্পর্কিত আইও মেমরির ঠিকানাগুলিতে অ্যাক্সেস করতে ব্যবহৃত হয়।
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(উবুন্টু 17.04 এ ডিফল্ট হিসাবে সেট করা)nopatx86 এর জন্য কার্নেল কমান্ড লাইন বিকল্পটি পাস করুনআইও বন্দরগুলি এখনও সেগুলি ছাড়া কাজ করে।
ক্যাশে ফ্লাশিং
আপনি যদি নিবন্ধের পরিবর্তে র্যামে লেখার চেষ্টা করেন তবে মেমরিটি সিপিইউ দ্বারা ক্যাশে করা যেতে পারে: https://stackoverflow.com/questions/22701352/how-to-flush-the-cpu-cache-for-a-region লিনাক্সের-ঠিকানা-ঠিকানা এবং আমি এটি ফ্লাশ করার বা অঞ্চলটিকে অপ্রয়োজনীয় হিসাবে চিহ্নিত করার খুব পোর্টেবল / সহজ উপায় দেখতে পাচ্ছি না:
সুতরাং সম্ভবত /dev/memডিভাইসে মেমরি বাফারগুলি নির্ভরযোগ্যভাবে ব্যবহার করা যাবে না?
দুর্ভাগ্যক্রমে কিউইএমইউতে এটি লক্ষ্য করা যায় না, যেহেতু কিউইএমইউ ক্যাশেগুলি অনুকরণ করে না।
কীভাবে এটি পরীক্ষা করা যায়
মজাদার অংশের জন্য এখন। এখানে কয়েকটি দুর্দান্ত সেটআপ দেওয়া হল:
volatileএকটি ইউজারল্যান্ড প্রক্রিয়াতে ভেরিয়েবল বরাদ্দ করুন/proc/<pid>/maps+ সহ শারীরিক ঠিকানা পান/proc/<pid>/pagemapdevmem2ব্যবহারকারীর প্রক্রিয়াটির সাথে প্রকৃত ঠিকানা এবং দেখুন:kmallocvirt_to_physএবং এটি ব্যবহারকারীর দেশে ফেরত দিনdevmem2devmem2রেজিস্টার লিখতে ব্যবহার করুনprintfগুলি প্রতিক্রিয়ায় ভার্চুয়াল ডিভাইস থেকে আসা/ dev / mem physicalতিহ্যগতভাবে পুরো শারীরিক ঠিকানার জায়গায় অ্যাক্সেস সরবরাহ করে। এতে র্যাম অন্তর্ভুক্ত রয়েছে তবে এতে কোনও মেমরি ম্যাপ করা আইও ডিভাইস অন্তর্ভুক্ত রয়েছে।
অনেকগুলি আধুনিক কার্নেলগুলি "CONFIG_STRICT_DEVMEM" দিয়ে কনফিগার করা হবে যা কেবলমাত্র / মেমরিযুক্ত ম্যাপ করা আইও ডিভাইসগুলিতে / dev / মেমিকে সীমাবদ্ধ করে।
এটিকে এলোমেলো আবর্জনা লেখা একটি খারাপ ধারণা তবে ঠিক কী ঘৃণ্যতা ঘটবে তা ভবিষ্যদ্বাণী করা ডাইফক্লট। হার্ডওয়্যারটি এলোমেলো আবর্জনার অপ্রত্যাশিত উপায়ে প্রতিক্রিয়া জানাতে পারে, দূষিত কার্নেল মেমরি স্ট্রাকচারগুলি অপ্রত্যাশিত কার্নেল আচরণের কারণ হতে পারে। সর্বোপরি আমি একটি সিস্টেম ক্র্যাশ আশা করব, সবচেয়ে খারাপ ডেটা দুর্নীতি বা এমনকি হার্ডওয়্যার ব্রিকিংয়ের বিষয়টিও প্রশ্নের বাইরে নয়।
পিএস নোট করুন যে আপনার কমান্ডটি যখন কোনও সাধারণ ব্যবহারকারী হিসাবে চালিত হয় তখন কিছু করা উচিত নয়, কারণ সুডো কেবল বিড়াল কমান্ডকেই পুনর্নির্দেশ করে না।
dd if=/dev/urandom of=/dev/kmem bs=1 count=1 seek=$RANDOM