Я пытаюсь написать драйвер псевдо-ядра (он использует CVE 2018-8120 для получения разрешения ядра, так что технически это не драйвер), и я хочу быть максимально безопасным при входе в ring0. Я пишу функцию для чтения и записи MSR из пользовательского пространства, и перед переходом на ring0 я пытаюсь гарантировать, что указатель void, данный моей функции, может быть написан, я решил, что идеальный способ сделать это - сделать это Доступно для записи, если это не так.
Проблема в том, что единственный способ, которым я знаю, как это сделать, - это VirtualProtect()
и NtAllocateVirtualMemory
, но VirtualProtect()
иногда дает сбой и вместо этого возвращает ошибку. Я хочу точно знать, где хранятся эти права доступа (в оперативной памяти? В каком-то специальном регистре ЦП?), Как я могу получить их адрес и как я могу изменить их напрямую?