Изменение отображения страниц для пользовательского процесса в ядре Linux
Итак, допустим, у меня есть доступ к процессу и его mm_struct, есть ли способ, которым я могу изменить одно из отображений или удалить отображение и создать временное, чтобы я мог выделить количество меньше, чем страница, и иметь память, записанную в тот?
Например, ошибки записи процесса в инструкции ADD. Я могу получить адрес и размер ошибки с относительной легкостью. Я выделяю 8 байтов локально (наибольший размер одной инструкции) и связываюсь с отображениями так, чтобы виртуальный адрес, на котором произошел сбой, указывал на первый байт из этих 8 байтов. Затем выполните один шаг инструкции, чтобы получить данные, предназначенные для другой страницы, а затем восстановите исходную страницу обратно в отображение. Мне просто любопытно, можно ли использовать что-то кроме страницы в области виртуальной памяти для процесса.
1 ответ
Базовая архитектура вашего компьютера определяет, что вы можете и не можете делать с виртуальной памятью. Вы не указали свою архитектуру, но я уверен, что она не позволит вам управлять модулем, размером меньше страницы.
Но для решения более важной проблемы, почему размер памяти имеет значение? Это распределение требуется для каждого потока, только если он неисправен, и он будет выделен для одной инструкции в пространстве пользователя. Просто используйте новую чистую страницу, чтобы временно отобразить ваш процесс, чтобы получить записанное значение. Его, вероятно, проще написать, и он лучше защищен: он позволит избежать раскрытия данных ядра ненадежному (и явно неисправному) приложению.