Изменение отображения страниц для пользовательского процесса в ядре Linux - PullRequest
1 голос
/ 06 августа 2011

Допустим, у меня есть доступ к процессу и его mm_struct, есть ли способ, которым я могу изменить одно из отображений или удалить отображение и создать временное, чтобы я мог выделить сумму меньше, чем страница, и иметь память написана к этому?

Например, ошибки записи процесса в инструкции ADD. Я могу получить адрес и размер ошибки с относительной легкостью. Я выделяю 8 байтов локально (наибольший размер одной инструкции) и связываюсь с отображениями так, чтобы виртуальный адрес, который отказал, указывал на первый байт из этих 8 байтов. Затем выполните один шаг инструкции, чтобы получить данные, предназначенные для другой страницы, а затем восстановите исходную страницу обратно в отображение. Мне просто любопытно, можно ли использовать что-то кроме страницы в области виртуальной памяти для процесса.

1 Ответ

2 голосов
/ 08 августа 2011

Базовая архитектура вашего компьютера определяет, что вы можете и не можете делать с виртуальной памятью. Вы не указали свою архитектуру, но я уверен, что она не позволит вам управлять юнитом, который меньше страницы.

Но для решения более крупной проблемы, почему размер памяти имеет значение? Такое распределение необходимо для каждого потока, только если он неисправен, и он будет выделен для одной инструкции пространства пользователя. Просто используйте новую чистую страницу, чтобы временно отобразить ваш процесс, чтобы получить записанное значение. Вероятно, его легче написать, и он лучше защищен: он позволит избежать передачи данных ядра ненадежному (и явно неисправному) приложению.

...