15

2016-09-19 8 views
0

네, 알고, 거기에 주변 일부 유사한 질문이 있습니다,하지만 그들 중 누구도15

나는 그것이 바보 같은 생각 것을 알고을 만족하지 않습니다,하지만 난 필요 것을 내 Visual Studio 2015 C++ - Project에서 커널 모드 (일명 Ring 0)를 입력하십시오.
최소한의 노력으로도이 작업을 수행하고 싶습니다. (특히 테스트를 위해 드라이버를 만들지 않고 모든 빌드 후에 서명하고 재배포해야하는 것은 매우 지루합니다).

어떻게하면됩니까?

프로젝트가 내 호스트 컴퓨터 또는 원격 컴퓨터 (또는 가상 컴퓨터)에서 실행되는지 여부는 중요하지 않습니다. 처분 할만큼 충분한 기계가 있습니다.


배경 : 현재 Cosmos operating system에서 작업 중이며 Ring 0 "특권"이 필요한 X86 어셈블리 명령어를 테스트해야합니다. 0xC0000096: Privileged instruction. - 오류로 8 줄에 중단됩니다 다음 코드를 실행 rdmsr, out, in
:

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

장치 드라이버를 사용하지 않고 링 0을 입력 할 수 있으면 운영 체제에 고정해야 할 주요 보안 구멍이 있습니다. – jcoder

+0

@jcoder : 아주 좋은 지적입니다. 그러나 장치 드라이버를 작성하고 배포하는 데 따르는 문제는 피하고 싶습니다.) – Unknown6656

+1

링 0에 들어가고 코드가 전달 된 드라이버를 작성할 수 있습니다. 매우 안전하지는 않지만 드라이버를 한 번만 설치하면됩니다. – jcoder

답변

1

AFAIK Visual Studio는 커널 코드를 디버깅 할 수 없지만 다음과 같은 다른 디버거가 있습니다. WinDbgKD. 알아낼 시간이 필요 하겠지만 다른 방법은 없습니다.