У меня есть набор вопросов относительно /dev/mem
:
-
Многие статьи в сети, по-видимому, ссылаются на
/dev/mem
как шлюз на"Physical RAM"
. Но если я прав,/dev/mem
является шлюзом для"Physical Address Space"
процессора, который может включать в себя контрольные регистры многих периферийных устройств HW, а не только ОЗУ? Пожалуйста, исправьте меня, если я ошибаюсь! -
Чтобы предотвратить злоупотребление злоумышленниками
/dev/mem
и изменение памяти ядра, необходимо включить флагCONFIG_STRICT_DEVMEM
, который запретит пользователям приложений получать доступ к физическому адресному пространству за пределами 1 МБ. Я проверил файл конфигурации на своем ПК (Ubuntu) и обнаружил, чтоCONFIG_STRICT_DEVMEM = y
. И я написал программу, которая пытается читать физическую память за пределами 1 МБ, и я был в состоянии читать! Отсутствие ошибки сегментации или ошибкиOperation NOT Permitted
. Как это возможно?
Моя программа выглядит примерно так:
fd = open ( "/dev/mem", O_RDWR);
ptr = (int*) mmap(0, MAP_SIZE, PROT_READ, fd, myAddress & (~MAP_MASK));
printf("%d", *ptr);