Microsoft MVP성태의 닷넷 이야기
Windows: 57. 새로 추가된 네트워크 커널 디버깅 및 PowerShell 3.0 [링크 복사], [링크+제목 복사],
조회: 35867
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 8개 있습니다.)
디버깅 기술: 3. 원격 컴퓨터 디버깅 - VPC 설정
; https://www.sysnet.pe.kr/2/0/265

디버깅 기술: 3.1. Managed 원격 디버깅과 WinDBG 원격 디버깅
; https://www.sysnet.pe.kr/2/0/314

디버깅 기술: 27. Windbg - Local Kernel Debug 모드
; https://www.sysnet.pe.kr/2/0/934

디버깅 기술: 29. Windbg - Hyper-V 윈도우 7 원격 디버깅 구성
; https://www.sysnet.pe.kr/2/0/938

Windows: 57. 새로 추가된 네트워크 커널 디버깅 및 PowerShell 3.0
; https://www.sysnet.pe.kr/2/0/1259

디버깅 기술: 62. windbg - 사용자 모드 원격 디버깅
; https://www.sysnet.pe.kr/2/0/1602

디버깅 기술: 192. Windbg - Hyper-V VM으로 이더넷 원격 디버깅 연결하는 방법
; https://www.sysnet.pe.kr/2/0/13343

디버깅 기술: 211. Windbg - 커널 모드 디버깅 상태에서 사용자 프로그램을 디버깅하는 방법
; https://www.sysnet.pe.kr/2/0/13851




윈도우 8 - 새로 추가된 네트워크 커널 디버깅 및 PowerShell 3.0

아래의 글 하나로 여러가지를 알게 되었습니다. ^^

PowerShell Script to Detect If NIC Supports Win8 Network Kernel Debugging
; http://chentiangemalc.wordpress.com/2012/03/03/powershell-script-to-detect-if-nic-supports-win8-network-kernel-debugging/

윈도우 8에는 Windows PowerShell 3.0이 새롭게 추가되었습니다.

다행히 윈도우 7에서도 Windows PowerShell 3.0을 설치할 수 있는데요. 독립적으로 PowerShell 3.0으로 업데이트 할 수는 없고 "Windows Management Framework 3.0"을 설치하면 그 안에 포함되어 업데이트됩니다. (WMF는 .NET Framework 4.0을 요구하고 현재는 영문 윈도우용으로 배포되며 설치 후 재부팅이 필요합니다.) 그런데 기본 명령어 셋을 보니 윈도우 8과 동일하지 않더군요. 예를 들어, 위의 글에서 설명한 "Get-NetAdapter" 명령어는 WMF 3.0을 설치한 윈도우 7에서는 없었습니다.

현재, 정식 버전이 나오지는 않았고 - 아직 윈도우 8이 베타이니 - 이것 역시 베타까지 공개되었습니다.

Windows Management Framework 3.0 Beta Available for Download
; https://devblogs.microsoft.com/powershell/windows-management-framework-3-0-beta-available-for-download/

다운로드
; http://go.microsoft.com/fwlink/?LinkID=240290

개인적으로는, 무엇보다도 PowerShell 3.0이 문법적으로 많이 깔끔해졌다는데 의미가 있어 보입니다. 아래의 글에 보면 예제가 나오는데요.

Quick note on PowerShell 3.0
; http://www.thomasmaurer.ch/2011/09/quick-note-on-powershell-3-0/

PowerShell 2.0에서는 아래와 같이 다소 지저분한(?) 구문을 사용해야 했지만,

Get-Childitem | Where {$_.name -eq "Desktop"}

3.0부터는 간결하게 코딩할 수 있도록 개선되었습니다.

Get-Childitem | where name -eq Desktop

오~~~ 이제야 좀 낯설지 않은 Shell Script가 된 것 같습니다. ^^

참고로, "PowerShell Script to Detect If NIC Supports Win8 Network Kernel Debugging" 글의 스크립트를 실행하려면 PowerShell 의 실행 정책을 변경시켜 줘야 합니다.

File cannot be loaded because the execution of scripts is disabled on this system error in PowerShell
; http://www.itexperience.net/file-cannot-be-loaded-because-the-execution-of-scripts-is-disabled-on-this-system-error-in-powershell/

관리자 모드로 실행된 명령어 창에서 실행: Set-ExecutionPolicy Unrestrictedcls




그런데, 정작 중요한 "네트워크 카드로 직접 커널 디버깅(KDNET)"을 하는 방법에 대한 테스트를 할 수가 없군요. ^^; 아쉽게도 윈도우 8을 Hyper-V에 설치한 제 경우에는 테스트가 불가능했는데, 왜냐하면 Hyper-V가 제공하는 가상 네트워크 어댑터는 "커널 디버깅이 가능한 네트워크 카드"에 속하지 않기 때문입니다.

그래도 아쉬운 마음에 한번 시도는 해보았는데요. ^^ 네트워크 커널 디버깅에 대한 자료가 생각보다 없었는데, 하나 찾은 것이 있다면 지난번 Build 2011에서 다음과 같이 공개된 것이 전부인 듯합니다.

Windows 8 kernel debugging: New protocols and certification requirements (HW-98P)
; http://channel9.msdn.com/Events/BUILD/BUILD2011/HW-98P

다행인 것은 ^^ 방법이 무척 간단하다는 점인데, 이러저러하게 COM 포트 설정할 필요 없이 디버깅 대상이 될 머신에서는 bcdedit로 다음과 같이만 실행해 주면 됩니다.

bcdedit -dbgsettings net hostip:[디버거가 실행될 호스트 측 IP] port:[호스트 측의 디버거가 대기할 포트]

* 지정 가능한 포트 범위는 49151 < port < 65536입니다.
* 위와 같이 실행하면 화면에 key 문자열이 나옵니다. 그걸 복사해 두고, debug 기능을 다음과 같이 켜줍니다.

bcdedit -debug on

아래는, 위의 명령어를 윈도우 8에서 실행 결과 화면입니다.

network_kernel_debug_1.png

그다음, 별도의 컴퓨터로 마련된 호스트 측에서 windbg를 실행해 주어야 하는데요. 당연하지만, 기존 설치된 windbg는 "네트워크 커널 디버깅"을 지원하지 않기 때문에 새 버전을 다운로드 해야 합니다.

Download and Install Debugging Tools for Windows
; https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk

Windows Software Development Kit (SDK) for Windows 8 Consumer Preview
; https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/

WSDK 설치 시에 모든 구성요소를 선택할 필요 없이 "Debugging Tools for Windows"만 선택해 주셔도 됩니다. (168MB 정도 필요)

설치 후, Channel 9 비디오에 나온 대로 다음과 같이 입력했는데 이상하게 오류만 발생했습니다.

windbg -k net:port=50000, key=gppy78yj2w5d.34j4lx4l44273.13om3uf5me7yy.1yh8s2rvdmuhq

"The command line arguments cannot specify more than one kind of debugging to start"

어쩔 수 없이, 그냥 windbg를 실행하고 "File" / "Kernel Debug..."를 선택한 후 아래 화면과 같이 "NET" 탭에서 Port와 Key 값을 입력해 주고 실행해 주었습니다.

network_kernel_debug_2.png

확인을 누르면 다음 화면과 같이 호스트 측에서 "대기"를 하게 되고,

network_kernel_debug_3.png

이제 bcdedit.exe를 실행했던 대상 머신을 재부팅하면 bcdedit 명령인자로 전달했던 hostip/port 정보를 이용하여 호스트 측의 디버거로 연결을 시도하고 그 이후로 네트워크 커널 디버깅이 동작됩니다. 되어야 합니다.

이전에 말씀드린 대로... 애석하게도 여기까지 실습은 못했습니다. ^^; 그래도 혹시나 싶어서 해본 건데, 역시나 Hyper-V 가상 네트워크 어댑터는 이를 지원해 주지 않았습니다. (그럼... 윈도우 서버 8에 있는 Hyper-V는 이를 지원해 주지 않을까요? ^^) 어쨌든, Hyper-V 가상 머신에 대해서는 여전히 다음과 같은 전통적인 방법으로 커널 디버깅을 해야 할 것 같습니다.

Windbg - Hyper-V 윈도우 7 원격 디버깅 구성
; https://www.sysnet.pe.kr/2/0/938

허긴 어찌 보면, Remote Kernel Debugging 자체가 대개의 경우 물리 장치에 대한 디바이스 드라이버가 대상인 것을 감안하면 Hyper-V 가상 머신에서 이를 위한 지원을 포함하는 것은 별다르게 큰 의미가 될 것 같지는 않습니다. (그래도, 그렇지... ^^)
(2025-01-28 업데이트: Hyper-V의 가상 네트워크 어댑터가 External 유형인 경우 물리 어댑터를 기반으로 생성되므로 이런 경우에는 VM과 호스트 간의 원격 디버깅이 가능합니다.)

참고로, Windows 8 kernel debugging: New protocols and certification requirements (HW-98P)을 보면 USB 3.0을 이용한 디버깅 방법도 나오는데요. USB 2.0에 비해서 속도가 월등히 빠르다고 하며 디버깅 설정도 위에서 설정한 방법과 비슷하게 간단합니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 1/18/2025]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2015-07-02 02시27분
정성태

... 91  92  93  94  95  96  97  98  99  100  101  102  [103]  104  105  ...
NoWriterDateCnt.TitleFile(s)
11357정성태11/15/201727093개발 환경 구성: 336. 윈도우 10 Bash 쉘에서 C++ 컴파일하는 방법
11356정성태11/15/201728646사물인터넷: 8. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스 + 키보드로 쓰는 방법 [4]
11355정성태11/15/201724497사물인터넷: 7. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스로 쓰는 방법 [2]파일 다운로드2
11354정성태11/14/201728649사물인터넷: 6. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 키보드로 쓰는 방법 [8]
11353정성태11/14/201725856사물인터넷: 5. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 이더넷 카드로 쓰는 방법 [1]
11352정성태11/14/201721931사물인터넷: 4. Samba를 이용해 윈도우와 Raspberry Pi간의 파일 교환 [1]
11351정성태11/7/201725202.NET Framework: 698. C# 컴파일러 대신 직접 구현하는 비동기(async/await) 코드 [6]파일 다운로드1
11350정성태11/1/201721167디버깅 기술: 108. windbg 분석 사례 - Redis 서버로의 호출을 기다리면서 hang 현상 발생
11349정성태10/31/201721620디버깅 기술: 107. windbg - x64 SOS 확장의 !clrstack 명령어가 출력하는 Child SP 값의 의미 [1]파일 다운로드1
11348정성태10/31/201718130디버깅 기술: 106. windbg - x64 역어셈블 코드에서 닷넷 메서드 호출의 인자를 확인하는 방법
11347정성태10/28/201721709오류 유형: 424. Visual Studio - "클래스 다이어그램 보기" 시 "작업을 완료할 수 없습니다. 해당 인터페이스를 지원하지 않습니다." 오류 발생
11346정성태10/25/201718261오류 유형: 423. Windows Server 2003 - The client-side extension could not remove user policy settings for 'Default Domain Policy {...}' (0x8007000d)
11338정성태10/25/201716670.NET Framework: 697. windbg - SOS DumpMT의 "BaseSize", "ComponentSize" 값에 대한 의미파일 다운로드1
11337정성태10/24/201718803.NET Framework: 696. windbg - SOS DumpClass/DumpMT의 "Vtable Slots", "Total Method Slots", "Slots in VTable" 값에 대한 의미파일 다운로드1
11336정성태10/20/201719570.NET Framework: 695. windbg - .NET string의 x86/x64 메모리 할당 구조
11335정성태10/18/201718577.NET Framework: 694. 닷넷 - <Module> 클래스의 용도
11334정성태10/18/201719625디버깅 기술: 105. windbg - k 명령어와 !clrstack을 조합한 호출 스택을 얻는 방법
11333정성태10/17/201718783오류 유형: 422. 윈도우 업데이트 - Code 9C48 Windows update encountered an unknown error.
11332정성태10/17/201719780디버깅 기술: 104. .NET Profiler + 디버거 연결 + .NET Exceptions = cpu high
11331정성태10/16/201718147디버깅 기술: 103. windbg - .NET 4.0 이상의 환경에서 모든 DLL에 대한 심벌 파일을 로드하는 파이썬 스크립트
11330정성태10/16/201717397디버깅 기술: 102. windbg - .NET 4.0 이상의 환경에서 DLL의 심벌 파일 로드 방법 [1]
11329정성태10/15/201721500.NET Framework: 693. C# - 오피스 엑셀 97-2003 .xls 파일에 대해 32비트/64비트 상관없이 접근 방법파일 다운로드1
11328정성태10/15/201724418.NET Framework: 692. C# - 하나의 바이너리로 환경에 맞게 32비트/64비트 EXE를 실행하는 방법파일 다운로드1
11327정성태10/15/201718197.NET Framework: 691. AssemblyName을 .csproj에서 바꾼 경우 빌드 오류 발생하는 문제파일 다운로드1
11326정성태10/15/201718506.NET Framework: 690. coreclr 소스코드로 알아보는 .NET 4.0의 모듈 로딩 함수 [1]
11325정성태10/14/201719380.NET Framework: 689. CLR 4.0 환경에서 DLL 모듈의 로드 주소(Base address) 알아내는 방법
... 91  92  93  94  95  96  97  98  99  100  101  102  [103]  104  105  ...