Tidakkah perlindungan memori menghentikan akses ke RAM fisik untuk semua proses kecuali yang telah ditetapkan untuk area RAM itu? Atau apakah sudo mengesampingkan perlindungan itu?
Saya sarankan meninjau halaman mem mem. Kain benar. "mem adalah file perangkat karakter yang merupakan gambar dari memori utama komputer. Ini dapat digunakan, misalnya, untuk memeriksa (dan bahkan menambal) sistem. Alamat byte dalam mem diartikan sebagai alamat memori fisik." Dan ... "File kmem sama dengan mem, kecuali bahwa memori virtual kernel daripada memori fisik diakses."
Tn. Shickadance
@Andrew Flanagan: Tautan Anda sekarang menunjukkan bagaimana seseorang dapat mengatur stopwatch menggunakan perintah waktu.
Aiyion.Prime
1
@ Aiyion.Prime. Terima kasih - menunjuk ke versi archive.org.
Andrew Flanagan
19
/ dev / mem menyediakan akses ke memori fisik sistem , bukan memori virtual. Ruang alamat virtual kernel dapat diakses menggunakan / dev / kmem.
Ini terutama digunakan untuk mengakses alamat memori IO yang terkait dengan perangkat keras periferal, seperti adapter video.
sudo cat /dev/urandom > /dev/memtidak akan melakukan apa-apa, karena sudo akan meningkatkan hak istimewa kucing tetapi tidak dari pengalihan. Anda dapat melakukannya sudo sudan kemudian bekerja di shell root, atau gunakan sudo dd if=/dev/urandom of=/dev/mem
/dev/memmenyediakan akses ke memori fisik, yaitu semua RAM dalam sistem, namun ini tidak berarti bahwa itu memberi Anda akses baca / tulis penuh ke RAM (lihat opsi CONFIG_STRICT_DEVMEM dalam dokumen ini ). Perhatikan juga bahwa beberapa wilayah memori fisik akan memiliki perangkat lain seperti memori kartu video, dll. Yang dipetakan di atasnya.
Menulis secara membabi buta /dev/memakan mengakibatkan perilaku yang tidak pasti, di sini adalah video youtube melakukan hal yang sama.
MAP_SHARED membuat write masuk ke memori fisik segera, yang membuatnya lebih mudah untuk diamati, dan lebih masuk akal untuk hardware register menulis.
CONFIG_STRICT_DEVMEM dan nopat
Untuk menggunakan /dev/memuntuk melihat dan memodifikasi RAM reguler pada kernel v4.9, Anda harus mengepal:
nonaktifkan CONFIG_STRICT_DEVMEM(ditetapkan secara default pada Ubuntu 17.04)
/ dev / mem secara tradisional menyediakan akses ke seluruh ruang alamat fisik. Itu termasuk ram tetapi juga mencakup perangkat IO yang dipetakan memori.
Banyak kernel modern akan dikonfigurasikan dengan "CONFIG_STRICT_DEVMEM" yang membatasi / dev / mem hanya ke perangkat IO yang dipetakan di memori.
Menulis sampah secara acak adalah ide yang buruk, tetapi persis apa yang akan terjadi adalah sulit untuk diprediksi. Perangkat keras dapat merespons dengan cara yang tidak terduga terhadap sampah acak, struktur memori kernel yang rusak dapat menyebabkan perilaku kernel yang tidak dapat diprediksi. Paling-paling saya akan mengharapkan sistem crash, korupsi data terburuk atau bahkan bricking perangkat keras tidak keluar dari pertanyaan.
PS perhatikan bahwa perintah Anda ketika dijalankan sebagai pengguna biasa seharusnya tidak melakukan apa-apa, karena sudo hanya menghilangkan perintah cat, bukan redirect.
dd if=/dev/urandom of=/dev/kmem bs=1 count=1 seek=$RANDOM
Jawaban:
Ini memberikan akses ke memori fisik sistem.
The
mem(4)
halaman manual menjelaskan lebih lanjut tentang apa/dev/mem
yang.Ya - itu bisa menyebabkan berbagai masalah. Reboot akan memperbaiki Anda, tetapi hal-hal buruk dapat terjadi dengan sangat mudah. Hati-hati! :-)
sumber
/ dev / mem menyediakan akses ke memori fisik sistem , bukan memori virtual. Ruang alamat virtual kernel dapat diakses menggunakan / dev / kmem.
Ini terutama digunakan untuk mengakses alamat memori IO yang terkait dengan perangkat keras periferal, seperti adapter video.
sumber
sudo cat /dev/urandom > /dev/mem
tidak akan melakukan apa-apa, karena sudo akan meningkatkan hak istimewa kucing tetapi tidak dari pengalihan. Anda dapat melakukannyasudo su
dan kemudian bekerja di shell root, atau gunakansudo dd if=/dev/urandom of=/dev/mem
/dev/mem
menyediakan akses ke memori fisik, yaitu semua RAM dalam sistem, namun ini tidak berarti bahwa itu memberi Anda akses baca / tulis penuh ke RAM (lihat opsi CONFIG_STRICT_DEVMEM dalam dokumen ini ). Perhatikan juga bahwa beberapa wilayah memori fisik akan memiliki perangkat lain seperti memori kartu video, dll. Yang dipetakan di atasnya.Menulis secara membabi buta
/dev/mem
akan mengakibatkan perilaku yang tidak pasti, di sini adalah video youtube melakukan hal yang sama.sumber
Uji dengan
busybox devmem
busybox devmem
adalah utilitas CLI kecil yang mmaps/dev/mem
.Anda bisa mendapatkannya di Ubuntu dengan:
sudo apt-get install busybox
Penggunaan: baca 4 byte dari alamat fisik
0x12345678
:Tulis
0x9abcdef0
ke alamat itu:Sumber: https://github.com/mirror/busybox/blob/1_27_2/miscutils/devmem.c#L85
MAP_SHARED
Saat mmapping
/dev/mem
, Anda mungkin ingin menggunakan:MAP_SHARED
membuat write masuk ke memori fisik segera, yang membuatnya lebih mudah untuk diamati, dan lebih masuk akal untuk hardware register menulis.CONFIG_STRICT_DEVMEM
dannopat
Untuk menggunakan
/dev/mem
untuk melihat dan memodifikasi RAM reguler pada kernel v4.9, Anda harus mengepal:CONFIG_STRICT_DEVMEM
(ditetapkan secara default pada Ubuntu 17.04)nopat
opsi baris perintah kernel untuk x86Port IO masih berfungsi tanpa itu.
Lihat juga: https://stackoverflow.com/questions/39134990/mmap-of-dev-mem-fails-with-invalid-argument-for-virt-to-phys-address-but-addre/45127582#45127582
Cache memerah
Jika Anda mencoba menulis ke RAM alih-alih register, memori dapat di-cache oleh CPU: https://stackoverflow.com/questions/22701352/how-to-flush-the-cpu-cache-for-a-region -of-address-space-in-linux dan saya tidak melihat cara yang sangat portabel / mudah untuk menyiramnya atau menandainya sebagai tidak dapat di-cache:
Jadi mungkin
/dev/mem
tidak dapat digunakan secara andal untuk meneruskan buffer memori ke perangkat?Sayangnya, ini tidak dapat diamati dalam QEMU, karena QEMU tidak mensimulasikan cache.
Cara mengujinya
Sekarang untuk bagian yang menyenangkan. Berikut ini beberapa pengaturan keren:
volatile
variabel pada proses userland/proc/<pid>/maps
+/proc/<pid>/pagemap
devmem2
, dan perhatikan proses userland bereaksi:kmalloc
virt_to_phys
dan kirimkan kembali ke userlanddevmem2
devmem2
untuk menulis ke registerprintf
keluar dari perangkat virtual sebagai tanggapansumber
/ dev / mem secara tradisional menyediakan akses ke seluruh ruang alamat fisik. Itu termasuk ram tetapi juga mencakup perangkat IO yang dipetakan memori.
Banyak kernel modern akan dikonfigurasikan dengan "CONFIG_STRICT_DEVMEM" yang membatasi / dev / mem hanya ke perangkat IO yang dipetakan di memori.
Menulis sampah secara acak adalah ide yang buruk, tetapi persis apa yang akan terjadi adalah sulit untuk diprediksi. Perangkat keras dapat merespons dengan cara yang tidak terduga terhadap sampah acak, struktur memori kernel yang rusak dapat menyebabkan perilaku kernel yang tidak dapat diprediksi. Paling-paling saya akan mengharapkan sistem crash, korupsi data terburuk atau bahkan bricking perangkat keras tidak keluar dari pertanyaan.
PS perhatikan bahwa perintah Anda ketika dijalankan sebagai pengguna biasa seharusnya tidak melakukan apa-apa, karena sudo hanya menghilangkan perintah cat, bukan redirect.
sumber