Post

[Windows] Kernel Debugging

windows kernel 공부를 하면서 디버깅할 일이 생겨서 해당 포스트를 작성합니다. 이때까지 시도한 방법은 아래의 2가지 방법이었습니다.

  • serial port
  • network

해당 방법중 serial port를 이용한 방법은 baudrate를 1152000으로 설정해도 kernel 디버깅이 매우 느리게 작동했습니다. 따라서, vmware와 network를 이용한 디버깅 방법에 대해서 소개해드리겠습니다.

windbg 및 windows SDK 설치

우선, windbg를 설치해야됩니다. 링크에서 다운 받을 수 있으며 아래에 있는 버튼을 이용해 설치합니다.

0windbg install

또한, Windows SDK를 설치해야됩니다. Windows SDK는 링크에서 설치를 할 수 있습니다. SDK안에 디버깅을 할 때 필요한 kdnet.exeVerifiedNICList.xml 파일이 있기 때문에 필수적으로 설치해야합니다!

VMware Windows 설치

설치를 하고 나면 vmware를 통해 windows를 설치합니다.

💡 이미 windows를 설치해뒀어도 상관없습니다!

이 때, 네트워크는 다음과 같이 Bridged 모드로 설치를 진행합니다.

1Vmware Setting

Vmware Windows 설정

Guest OS인 Windows에서 설정을 해야됩니다. 우선 다음의 명령어로 테스트 모드를 활성화합니다.

1
2
bcdedit -set loadoptions disable_intergrity_checks      
bcdedit -set testsigning on

이후, Host에서 C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 경로에 존재하는 아래의 파일을 Guest에 복사합니다.

  • kdnet.exe
  • VerifiedNICList.xml

복사해둔 위의 2개의 파일을 C:\kdnet 폴더를 생성해서 안에 넣어줍니다.

2kdnet Setting 1

이후, kdnet.exe를 실행시켜서 아래와 같이 호환이 가능한 장치가 있는 지 확인합니다.

3kdnet Setting 2

호환되는 장치가 있다면 아래의 명령어를 실행합니다.

1
.\kdnet.exe [Host IP Address] [PORT]
  • Host IP Address : Host의 IP 주소를 입력합니다.
  • PORT : 원하는 포트를 입력합니다. 보통 50000번 포트를 사용합니다.

위의 명령어를 실행하면 출력되는 windbg.exe로 시작되는 명령어가 있습니다. 해당 명령어중 key로 시작하는 값을 기록해둡니다. 이후, shutdown -r -t 0 명령어를 실행해서 Guest OS를 재부팅시킵니다.

Kernel Debugging

좀전에 저장해둔 key 값을 사용해서 windbg에서 다음과 같이 입력합니다.

4windbg Setting

이렇게 모든 설정을 하고 windbg를 실행하면 커널 디버깅이 정상적으로 되는 것을 확인할 수 있습니다.

5windbg 결과

This post is licensed under CC BY 4.0 by the author.