Ввод кольца 0 с C ++ с использованием Visual Studio 15

Да, я знаю, что вокруг есть несколько похожих вопросов, но ни один из них не удовлетворяет

Я знаю, что это глупая идея, но я необходимость войти в режим ядра (он же Ring 0) с моим Visual Studio 2015 C ++ — Project.
Я также хочу сделать это с минимальными необходимыми усилиями (это означает, что я не хочу создавать драйвер специально для тестирования и подписывать и повторно развертывать после каждой сборки, поскольку это очень утомительно).

Как мне этого добиться?

Для меня не имеет значения, запущен ли проект на моей хост-машине или на удаленной (или виртуальной) — в моем распоряжении достаточно машин.


Фон: В настоящее время я работаю над Космос операционная система и мне нужно протестировать инструкции по сборке 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
}

....

И да, я полностью осознаю любой риск, который я принимаю, поэтому, пожалуйста, не спрашивайте, почему я должен был бы сделать такую ​​вещь или я пытаюсь получить премию программиста Дарвина;)

0

Решение

AFAIK Visual Studio не может отлаживать код ядра, но есть и другие отладчики, которые могут: WinDbg а также KD. Вам понадобится некоторое время, чтобы понять их, но другого пути нет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]