Да, я знаю, что вокруг есть несколько похожих вопросов, но ни один из них не удовлетворяет
Я знаю, что это глупая идея, но я необходимость войти в режим ядра (он же 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
}
....
И да, я полностью осознаю любой риск, который я принимаю, поэтому, пожалуйста, не спрашивайте, почему я должен был бы сделать такую вещь или я пытаюсь получить премию программиста Дарвина;)
AFAIK Visual Studio не может отлаживать код ядра, но есть и другие отладчики, которые могут: WinDbg а также KD. Вам понадобится некоторое время, чтобы понять их, но другого пути нет.
Других решений пока нет …