Как ядро не позволяет вредоносной программе прочитать всю физическую оперативную память?

Это действительно - два вопроса и должно было быть разделено. Но так как ответы относительно просты, я помещу их здесь. Эти ответы для GNU grep конкретно.

a) egrep совпадает с grep -E. Оба указывают, что "Расширенные регулярные выражения" должны использоваться вместо grepРегулярные выражения по умолчанию. grep требует обратных косых черт для простых Регулярных выражений.

От man страница:

Основной по сравнению с расширенными регулярными выражениями

В основных регулярных выражениях метасимволы?, +, {|, (и) теряют их особое значение; вместо этого используйте backslashed версии \?, \+, \{, \|, \(, и \).

Посмотрите man страница для дополнительных деталей об исторических конвенциях и мобильности.

b) Использовать egrep '(.)\1{N}' и замена N с количеством символов Вы хотите заменить минус один (так как точка соответствует первому). Таким образом, если Вы хотите соответствовать символу, повторенному четыре раза, использовать egrep '(.)\1{3}'.

10
08.12.2015, 21:44
1 ответ

Не ядро ​​предотвращает плохой доступ к памяти, а ЦП. Роль ядра - только правильно настроить ЦП.

Точнее, аппаратный компонент, который предотвращает неправильный доступ к памяти, - это MMU . Когда программа обращается к адресу памяти, адрес декодируется ЦП на основе содержимого MMU. MMU устанавливает преобразование виртуальных адресов в физические адреса: когда ЦП выполняет загрузку или сохраняет по определенному виртуальному адресу, он вычисляет соответствующий физический адрес на основе содержимого MMU. Ядро устанавливает конфигурацию MMU таким образом, чтобы каждая программа могла получить доступ только к памяти, на которую она имеет право. Память других программ и аппаратные регистры вообще не отображаются в памяти программы: эти физические адреса не имеют соответствующего виртуального адреса в конфигурации MMU для этой программы.

При переключении контекста между различными процессами ядро ​​изменяет конфигурацию MMU, чтобы она содержала желаемый перевод для нового процесса.

Некоторые виртуальные адреса вообще не отображаются, т.е. MMU преобразует их в специальное значение «нет такого адреса». Когда процессор разыменовывает неотмеченный адрес, это вызывает ловушку: процессор переходит в заранее определенное место в коде ядра. Некоторые ловушки законны; например, виртуальный адрес может соответствовать странице, находящейся в пространстве подкачки , и в этом случае код ядра загрузит содержимое страницы из подкачки, а затем переключится обратно на исходную программу таким образом, чтобы инструкция доступа к памяти выполняется снова.Другие прерывания не являются законными, и в этом случае процесс получает сигнал , который по умолчанию немедленно завершает программу (и, если нет, переходит к обработчику сигнала в программе: в любом случае инструкция доступа к памяти не завершена ).

12
27.01.2020, 20:02

Теги

Похожие вопросы