Apa hasil berikut:
cat /dev/mem | wc
Saya mendapatkan:
cat: /dev/mem: Operation not permitted
1908 11791 1048576
Jadi bagi saya itu berhenti di 1MB.
Perhatikan bahwa cat menggunakan open, bukan mmap jadi ini bukan tes yang identik.
Apakah Anda yakin membaca melebihi 1MB?
-
Ya, Anda benar, /dev/mem memungkinkan Anda memetakan alamat fisik apa pun, termasuk IO yang dipetakan memori non-RAM. Ini dapat berguna untuk peretasan cepat dan kotor untuk mengakses beberapa perangkat keras tanpa menulis driver kernel.
-
CONFIG_STRICT_DEVMEM membuat kernel memeriksa alamat di /dev/mem dengan
devmem_is_allowed()
diarch/x86/mm/init.c
, dan komentar di sana menjelaskan:* 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.
alamat Anda
0xFFFF0000
kemungkinan besar non-RAM, karena BIOS biasanya menempatkan memori IO tepat di bawah 4 GB, sehingga Anda dapat memetakannya bahkan dengan STRICT_DEVMEM.