Presumiblemente, ¿está relacionado de alguna manera con la memoria? Que seria
sudo cat /dev/urandom > /dev/mem
¿hacer? ¿Basura todo RAM? ¿Toda la memoria virtual no kernel? ¿Ninguna de las anteriores?
Presumiblemente, ¿está relacionado de alguna manera con la memoria? Que seria
sudo cat /dev/urandom > /dev/mem
¿hacer? ¿Basura todo RAM? ¿Toda la memoria virtual no kernel? ¿Ninguna de las anteriores?
Respuestas:
Proporciona acceso a la memoria física del sistema.
La mem(4)
página del manual explica más sobre lo que /dev/mem
es.
Sí, podría causar todo tipo de problemas. Un reinicio debería solucionarlo, pero las cosas malas pueden suceder muy fácilmente. ¡Ten cuidado! :-)
/ dev / mem proporciona acceso a la memoria física del sistema , no a la memoria virtual. Se puede acceder al espacio de direcciones virtuales de los núcleos usando / dev / kmem.
Se utiliza principalmente para acceder a direcciones de memoria IO relacionadas con hardware periférico, como adaptadores de video.
sudo cat /dev/urandom > /dev/mem
no hará nada, ya que sudo elevará el privilegio de cat pero no de la redirección. Puede hacer sudo su
y luego trabajar en el shell raíz, o usar
sudo dd if=/dev/urandom of=/dev/mem
/dev/mem
proporciona acceso a la memoria física, es decir, a toda la RAM del sistema, sin embargo, esto no significa que le brinde acceso completo de lectura / escritura a la RAM (consulte la opción CONFIG_STRICT_DEVMEM en este documento). También tenga en cuenta que algunas regiones de la memoria física tendrán otros dispositivos, como la memoria de la tarjeta de video, etc.
Escribir a ciegas /dev/mem
dará como resultado un comportamiento incierto, aquí hay un video de YouTube que hace lo mismo.
Pruébalo con busybox devmem
busybox devmem
es una pequeña utilidad CLI que hace mapas /dev/mem
.
Puedes obtenerlo en Ubuntu con: sudo apt-get install busybox
Uso: leer 4 bytes de la dirección física 0x12345678
:
sudo busybox devmem 0x12345678
Escribe 0x9abcdef0
a esa dirección:
sudo busybox devmem 0x12345678 w 0x9abcdef0
Fuente: https://github.com/mirror/busybox/blob/1_27_2/miscutils/devmem.c#L85
MAP_SHARED
Cuando mmapping /dev/mem
, es probable que desee usar:
open("/dev/mem", O_RDWR | O_SYNC);
mmap(..., PROT_READ | PROT_WRITE, MAP_SHARED, ...)
MAP_SHARED
hace que las escrituras vayan a la memoria física inmediatamente, lo que facilita su observación y tiene más sentido para las escrituras de registro de hardware.
CONFIG_STRICT_DEVMEM
y nopat
Para usar /dev/mem
para ver y modificar RAM normal en el kernel v4.9, debe puño:
CONFIG_STRICT_DEVMEM
(configurado de forma predeterminada en Ubuntu 17.04)nopat
opción de línea de comando del kernel para x86Los puertos IO todavía funcionan sin esos.
Lavado de caché
Si intenta escribir en la RAM en lugar de un registro, la CPU puede almacenar en caché la memoria: https://stackoverflow.com/questions/22701352/how-to-flush-the-cpu-cache-for-a-region -of-address-space-in-linux y no veo una forma muy portátil / fácil de vaciarlo o marcar la región como no almacenable en caché:
Entonces, ¿tal vez /dev/mem
no se pueda usar de manera confiable para pasar memorias intermedias a dispositivos?
Desafortunadamente, esto no se puede observar en QEMU, ya que QEMU no simula cachés.
Cómo probarlo
Ahora viene la parte divertida. Aquí hay algunas configuraciones geniales:
volatile
variable en un proceso de usuario/proc/<pid>/maps
+/proc/<pid>/pagemap
devmem2
, y ver el proceso de tierra de usuario reaccionar:kmalloc
virt_to_phys
y devolverla a userlanddevmem2
devmem2
para escribir en el registroprintf
salen del dispositivo virtual en respuesta/ dev / mem tradicionalmente proporcionaba acceso a todo el espacio de direcciones físicas. Eso incluye ram pero también incluye cualquier dispositivo de E / S mapeado en memoria.
Muchos núcleos modernos se configurarán con "CONFIG_STRICT_DEVMEM", que restringe / dev / mem solo a dispositivos IO asignados a memoria.
Escribir basura al azar es una mala idea, pero es difícil predecir exactamente qué mal sucederá. El hardware puede responder de manera impredecible a la basura aleatoria, las estructuras de memoria del núcleo dañadas pueden causar un comportamiento impredecible del núcleo. En el mejor de los casos, esperaría un bloqueo del sistema, en el peor de los casos, la corrupción de datos o incluso el bloqueo de hardware no están fuera de discusión.
PD: tenga en cuenta que su comando cuando se ejecuta como un usuario normal no debería hacer nada, porque el sudo solo aplica el comando cat, no la redirección.
dd if=/dev/urandom of=/dev/kmem bs=1 count=1 seek=$RANDOM