2014-12-03 17 views
0

Visual Studio 커널 모드 디버거를 사용하여 WDM 커널 드라이버 IOCTL을 디버깅하고 있습니다. 파이프를 통해 Windows Server 2012 R2를 실행하는 Hyper-V VM에 직렬 연결합니다. 일단 IOControl 드라이버 내에서 중단 점을 누르면 사용자 모드 호출 스택을 볼 수 있습니까? 난 단지 커널 스택을 볼 수있는 순간 Windows Server 디버깅 : WDM 커널 모드 드라이버 중단 점에서 사용자 모드 스택보기

, 예를 들면 :

SIoctl!SioctlDeviceControl+0x14b [d:\workspace\ioctl\c++\sys\sioctl.c @ 320] C/C++/ASM 
    nt!IovCallDriver+0x3cd C/C++/ASM 
    nt!IopXxxControlFile+0x8d2 C/C++/ASM 
    nt!NtDeviceIoControlFile+0x56 C/C++/ASM 
    nt!KiSystemServiceCopyEnd+0x13 C/C++/ASM 
    ntdll!NtDeviceIoControlFile+0xa C/C++/ASM 
    KERNELBASE!DeviceIoControl+0x73 C/C++/ASM 
    KERNEL32!DeviceIoControl+0x80 C/C++/ASM 
    0x9c402408 C/C++/ASM 
> 0x0000005e`2f5af9c8 C/C++/ASM 

답변

0

! process 0 0 app.exe를 사용한 다음 .process/i pid 또는 .process/P id를 사용하여이 작업을 시도했지만 모두 사용자 스택을 표시하지 못합니다. 필자는 이미 그 프로세스에 있기 때문에 커널 드라이버 내부에 있다고 생각하기 때문에 실행중인 프로세스는 application.exe라고 생각합니다. 따라서 호출 스택 창을 보거나 k를 입력하면 커널 스택 만 볼 수 있습니다.

다른 프로세스로 "전환하는"비주얼 스튜디오 방식으로 작동하지 않는 것 같습니다. 다른 스택 프레임 (커널 스택 내에서 - 호출 스택에 표시된 것과 동일합니다. 창문).

WinDbg에서 해보겠습니다. 차이가 있는지 확인해보십시오.

편집 :!

는 나는 내가 한 상황 스레드를 전환 한 후, 지금은 다른 일을했고, 그 다음 났 하나 개의 스레드에 .thread 그것은 지금 잠 호출 내에서 작동된다. 어쨌든 내 IOCTL에서는 작동하지 않습니다. 하지만 WinDbg를 사용하여 지금 시도하고 멋지게 작동합니다!

많은 감사!

0

예, 먼저 원하는 프로세스로 전환 할 필요가 (들) 스택 것에 다음 액세스 할 수 있습니다. .process 참조 :

.process 명령은 프로세스 컨텍스트와 같은 특정 사용자 모드 프로세스를 사용하는 커널 디버거를 지시합니다. 이 사용법에는 여러 가지 영향이 있지만 가장 중요한 것은 디버거가이 프로세스의 가상 주소 공간에 액세스 할 수 있다는 것입니다. 디버거는이 프로세스의 페이지 테이블을 사용하여 모든 사용자 모드 메모리 주소를 해석하므로이 메모리를 읽고 쓸 수 있습니다.

참고 라이브 디버깅을 수행하는 경우 /i 또는 /p 매개 변수를 사용해야합니다. 이 매개 변수 중 하나가 없으면 사용자 모드 또는 세션 메모리를 올바르게 표시 할 수 없습니다. /i 매개 변수는 대상 프로세스를 활성화합니다. 이 옵션을 사용하면이 명령을 적용하려면 대상을 한 번 실행해야합니다. 다시 실행하면 프로세스 컨텍스트가 손실됩니다. /p 매개 변수는 forcedecodeuser 설정을 사용 가능하게합니다. (forcedecodeuser 옵션이 이미 활성화되어 있으면 /p을 사용할 필요가 없습니다.) 프로세스 컨텍스트와 forcedecodeuser 상태는 대상이 다시 실행될 때까지만 유지됩니다.

Visual Studio에 대한 질문과 WinDbg에 대한 답변을 알고 있습니다. 나는 당신이 직업에 적합한 도구를 사용해야한다고 생각합니다. WinDbg은 디버깅과 관련하여 무한히 유연하고 강력합니다. 나는 VS에서 Process context을 사용할 것이라고 생각하지만 WinDbg를 다시 사용하는 것이 좋습니다.