Ввод кольца 0 с C++ с использованием Visual Studio 15
Да, я знаю, что вокруг есть несколько похожих вопросов, но ни один из них не удовлетворяет
Я знаю, что это глупая идея, но мне нужно войти в режим ядра (он же Ring 0) с моим Visual Studio 2015 C++-Project.
Я также хочу сделать это с минимальными необходимыми усилиями (это означает, что я не хочу создавать драйвер специально для тестирования и подписывать и повторно развертывать после каждой сборки, поскольку это очень утомительно).
Как мне этого добиться?
Для меня не имеет значения, запущен ли проект на моей хост-машине или на удаленной (или виртуальной) - в моем распоряжении достаточно машин.
Справочная информация: в настоящее время я работаю над операционной системой Cosmos, и мне нужно протестировать инструкции по сборке X86, для которых требуется "привилегия" для Ring 0, например
rdmsr
, out
, in
и т.п. Выполнение следующего кода прервется на 8-й строке с
0xC0000096: Privileged instruction.
-Ошибка:int* ptr = new int[4];
int* va = ptr;
__asm
{
lea esi, va
mov ecx, 0xe7
rdmsr //error, as this must run in ring0
mov [esi + 4], eax
mov [esi], edx
mov ecx, 0xe8
rdmsr
mov [esi + 12], eax
mov [esi + 8], edx
xor eax, eax
}
....
И да, я полностью осознаю любой риск, который я принимаю, поэтому, пожалуйста, не спрашивайте, почему я должен был бы сделать такую вещь или я пытаюсь получить премию программиста Дарвина;)