본문 바로가기
개발/Windows

Windbg 커널디버깅 설정하기 (Network 디버깅)

by lucidmaj7 2020. 7. 27.
728x90
반응형

Windbg 커널디버깅 KDNET 설정하기 (Network 디버깅)

커널 드라이버를 개발하면서 언젠가?는 마주치게 되는 커널디버깅.
과거 물리적인 디버깅 대상 PC의 시리얼포트를 통해 개발 PC와 연결하여 커널디버깅을 했었지만 요새는 가상머신의 시리얼포트에 named 파이프를 설정하여 디버깅을 한다.
하지만 이 방식에는 큰 문제가 있는데 바로 속도의 문제이다. 과거 방식인 물리적인 시리얼포트가 그대로 가상머신에 들어왔을 뿐 인터페이스는 어찌됬건 시리얼포트인 것이다.
디버깅을 지원하는 시리얼 포트의 최대 속도는 115200bps(baudrates). 디버깅을 하는데 못할 정도는 아니지만, 로컬에서 유저모드 애플리케이션을 VS로 붙여서 디버깅하는 만큼 속도도 안나올 뿐더러 커널디버깅 특성상 이벤트자체가 많아 디버깅을 하려면 인내심을 키워야한다.

(또한 이것은 내 상황에만 그런지 모르겠지만 Hyper-v를 가상머신으로 사용하고 있는데 디버깅시 자꾸 timeout이 걸리는 등.. 좋지 못한 호환성을 보여주었다.)

이러한 구시대?적인 유물 인터페이스로 디버깅을 하려니 21세기에 답답하기 그지 없다. 다행히 좀더 나은 방법이 나타났으니 KDNET을 이용한 네트워크 디버깅 방법이다.
그럼 KDNET 설정방법에 대해 알아보자.

0. 가상머신 IP주소 확인

디버깅 설정에 앞서 가상머신의 IP주소를 ipconfig를 통해 확인한다. 가상머신의 IP주소와, Gateway주소를 기억해 놓자.

가상머신의 Gateway주소는 호스트컴퓨터의 IP가 된다.

 

1. 가상머신 디버깅 세팅, kdnet설정

기본적으로 WDK를 설치하면 windbg도 같이 설치 되며 windbg폴더 안에 kdnet.exe와 VerifiedNICList.xml이 존재한다.

이 두 파일을 가상머신의 c:\kdnet이라는 폴더에 복사해준다. 이때 32비트OS면 32비트, 64비트 OS면 64비트를 넣는다.

가상머신의 kdnet

네트워크를 이용한 커널 디버깅은 NIC카드와 호환성이 있는 모양이다. 때문에 가상머신에서 복사해온 Kdnet을 실행해보자. 

Hpyer-v는 지원하는 NIC이다.

실행해 보면 위와 같이 지원하는 NIC라고 알려준다.

지원 하는 NIC라면 다음과 같이 kdnet을 실행하여 네트워크 디버깅을 설정한다. MSDN에서 권장하는 포트의 범위는 50000-50039이므로 적당한 걸 골라 쓰자. 이때 호스트IP는 가상머신의 Gateway를 적어주자. Gateway가 호스트 컴퓨터 IP이다.

C:\>kdnet.exe <HostComputerIPAddress> <YourDebugPort> 

Enabling network debugging on Intel(R) 82577LM Gigabit Network Connection.
Key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

명령을 실행하면 key가 발급되는 것을 볼 수 있다. 이 키를 잘 적어두자.

그리고 PC를 재부팅 해준다.

 

2. 호스트 PC에서 Windbg실행

이제 호스트에서 Windbg를 실행하여 [file]->[Kernel debug]를 실행한다.

이때 창이 하나 뜨는데 [NET] 텝에서 가상머신에서 kdnet 설정시 입력한 포트 번호와, 키를 입력해준다.

 

OK를 누르면 방화벽 경고창이 출력되는데 개인, 공용 네트워크 모두 체크하고 접근 허용을 해준다.

 

이제 디버거는 가상머신이 접속하기를 기다린다.

 

 

가상머신이 정상적으로 디버거에 연결되면 다음과 같이 출력된다.

 

 

break를 눌러 보면 이제 커널 디버깅을 할 수 있음을 확인 할 수 있다.

 

 

이렇게 kdnet을 이용하여 hpyer-v에서 네트워크 커널디버깅을 설정하는 법을 알아 보았다.

실제로 네트워크 커널디버깅으로 하니 속도도 엄청 빠르고, 시리얼 디버깅보다 신세계를 경험할 수 있었다.

평소에 느려서 왠만하면 커널디버깅을 하지 않았던 것도 있던 터라 자주 애용해야할 방법이다.

 

 

참고

* https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection-automatically

 

Setting Up KDNET Network Kernel Debugging Automatically - Windows drivers

Use KDNET to configure network kernel debugging automatically for the Windows debugging tools.

docs.microsoft.com

* https://medium.com/@ophirharpaz/kdnet-tutorial-for-noobs-68669778bbd4

728x90
반응형

댓글