¿Qué produce lo siguiente:
cat /dev/mem | wc
obtengo:
cat: /dev/mem: Operation not permitted
1908 11791 1048576
Entonces, para mí, se detiene en 1 MB.
Tenga en cuenta que cat usa open, no mmap, por lo que no es una prueba idéntica.
¿Está seguro de que está leyendo más de 1 MB?
-
Sí, tiene razón, /dev/mem le permite asignar cualquier dirección física, incluidas las E/S asignadas a la memoria no RAM. Esto puede ser útil para un truco rápido y sucio para acceder a algún dispositivo de hardware sin escribir un controlador de kernel.
-
CONFIG_STRICT_DEVMEM hace que el kernel verifique las direcciones en /dev/mem con
devmem_is_allowed()
enarch/x86/mm/init.c
, y el comentario allí explica:* On x86, access has to be given to the first megabyte of ram because that area * contains bios code and data regions used by X and dosemu and similar apps. * Access has to be given to non-kernel-ram areas as well, these contain the PCI * mmio resources as well as potential bios/acpi data regions.
tu dirección
0xFFFF0000
es bastante probable que no sea RAM, ya que los BIOS normalmente colocan la memoria de E/S justo por debajo de los 4 GB, por lo que es posible asignarla incluso con STRICT_DEVMEM.