프로그래밍/커널 디버깅

윈도우 10(~RS3)에서 IEEE1394 커널 디버깅하기

Tetrahedrite 2019. 8. 18. 05:09

2019-08-21 수정: 윈도우 10 Redstone 3(빌드 1709)까지만 지원됩니다. Redstone 4(빌드 1803)에서는 동작하지 않습니다. 대안으로 나중에 KDNET을 이용한 네트워크 기반 커널 디버깅 방법에 대해서 소개할 예정입니다.

 

며칠을 붙잡고 헤메던 문제, 혹시나 누군가 같은 상황을 겪을까봐 올려봅니다.

 

호스트 PC와 타겟 PC의 주요 사양은 다음과 같습니다.

호스트 PC는 디버거를 실행하고 디버깅을 진행 할 PC, 타겟 PC는 디버깅을 당하는 디버기(Debuggee)가 되는 PC입니다.

호스트 PC : NEXT-1394VT EX, Windows 10 19H1 (1903, 18362.295)

타겟 PC : NEXT-1394TI, Windows 10 Redstone 3 (1709, 16299.431)

 

두 PC 모두 '주식회사 이지넷유비쿼터스'의 저렴한 제품인 NEXT-1394TI, VT EX 제품을 사용했습니다.

타겟 PC는 연식이 좀 있는 PC라서 PCI 단자가 있지만, 최신 컴퓨터인 호스트 PC는 PCI 단자가 없습니다.

최근 출시되는 메인보드는 PCI 슬롯이 아예 없기 때문에, 혹시라도 IEEE1394 확장 카드를 구매하시는 분들은 조심해서 구매하시면 되겠습니다.

 

케이블은 데이터 전송만 하기 때문에 비싸게 6P 케이블 사용하실 필요 없고 저렴한 4P 케이블로 구매해서 사용하시면 됩니다. 필자는 '강원전자 NETmate IEEE1394 (4P-4P)'라는 제품을 사용했습니다. 5m로 샀는데 너무 길군요.

 

두 카드 모두 가격이 상대적으로 저렴하고, 장착하고 부팅하면 알아서 드라이버가 잡힙니다.

TI 제품은 Texas Instruments사의 칩셋이 적용된 PCI 카드고, VT EX 제품은 VIA사의 칩셋이 적용된 PCI-Express 카드입니다.

 

장착을 하고 정상적으로 인식되면 장치 관리자에서 다음과 같은 모습을 볼 수 있습니다.

NEXT-1394VT EX를 장착한 호스트 PC (사진 1)

 

NEXT-1394TI를 장착한 타겟 PC (사진 2)

 

느낌표는 드라이버가 안잡힌게 아니라, 커널 디버거가 붙어서 그런 것입니다... (사진 3)

 

 

이제 그러면 타겟 PC에서 설정을 해야합니다.

두 가지 방법이 있습니다. 여러분이 편한 방법으로 하시면 됩니다. 결과적으로는 똑같습니다. 클릭, 타이핑의 차이일 뿐.

 

우선, 첫번째 방법입니다. msconfig을 이용하는 방법입니다.

 

실행(윈도우키+R)을 열고, msconfig을 입력한 후에 확인을 눌러줍니다.

(사진 4)

 

'부팅' 탭을 열고 디버깅 할 운영 체제를 선택하시고(보통 하나밖에 없으시겠지만) '고급 옵션(V)...'을 클릭해줍니다.

(사진 5)

 

'디버그(D)' 체크 박스에 체크하시고, '전역 디버그 설정'의 '디버그 포트(E):" 콤보 박스를 1394로 설정, '채널(C):'는 임의로 설정합니다.

(사진 6)

 

'확인'을 누르고 다시 시작해줍니다.

(사진 7)

 

PS. 혹시라도 나중에 끄실 때에는 여기서 설정한 '디버그(D)' 체크 박스를 체크 해제하시면 됩니다.
간혹 일부 게임 안티-치트 소프트웨어에서 커널 디버깅이 켜져 있으면 재부팅시키거나 실행을 못하게 합니다.

 

두번째 방법입니다. 명령 프롬프트 혹은 PowerShell을 '관리자 권한으로 실행'해줍니다.

(사진 8)

 

그리고 다음 명령을 순차적으로 입력합니다.

bcdedit /set debug on

bcdedit /set "{dbgsettings}" debugtype 1394

bcdedit /set "{dbgsettings}" channel [임의의 채널]

 

PS. 혹시라도 나중에 끄실 때에는 bcdedit /set debug off를 입력하시면 됩니다.

간혹 일부 게임 안티-치트 소프트웨어에서 커널 디버깅이 켜져 있으면 재부팅시키거나 실행을 못하게 합니다.

 

혹시나 두 방법중 진행하시다가 오류가 발생하신다면(특히 UEFI 설치일 때) BIOS로 가셔서 '안전 부팅' 관련 항목을 찾아서 끄거나, 끄는 옵션이 없다면 '안전 부팅 키 제거'를 통해서 안전 부팅을 없애줍니다. 그리고 다시 시작하시고 다시 진행하시면 됩니다.

 

우선 여기까지의 방법은 어디에서나 볼 수 있는 그대로입니다. 다만, 여기서 문제가 하나 생깁니다.

Windows 10 Redstone 2부터 IEEE1394를 사용한 커널 디버깅 기능을 제거했습니다. 정확히는 C:\Windows\System32 폴더에 있던 kd1394.dll이 더 이상 포함되지 않습니다.

그럼 어떻게 하느냐? 제가 Windows 10 Redstone 1에 있던 kd1394.dll을 가져왔으니 그걸 넣으시면 됩니다.

kd1394.zip
0.01MB

압축 풀어서 그걸 그대로 넣으시면 되겠습니다.

 

이제 다음으로 호스트 PC에서 디버깅을 해야합니다. 호스트 PC는 타겟 PC에 비해서 상당히 간단합니다.

 

타겟 PC의 버전에 맞게 WinDbg를 켜시고, File > Kernel Debug...를 클릭해주세요.

(사진 9)

 

'1394' 탭을 열고 타겟 PC에서 설정했던 채널을 입력하시고 확인을 눌러줍니다.

(사진 10)

 

Waiting for reconnect... 라는 글자가 보인다면 타겟 PC를 재부팅해주시면 연결 완료!

(사진 11)

 

이제 재미있는 커널 디버깅을 하시면 됩니다.