가상 COM 포트를 이용한 직접 연결
VMware Workstation에서는 가상 시리얼 포트(COM)를 named pipe에 연결해 WinDbg로 Windows 커널 디버깅을 수행할 수 있다.
1. com1 시리얼 포트 추가

2. Debug ON 설정
VM 에서 cmd창을 관리자 권한으로 열고 아래 명령어를 입력해준다.
`bcdedit /debug on`
`bcdedit /dbgsettings serial debugport:1 baudrate:115200`

debugport:1은 VMware에서 추가한 COM1을 의미한다.
baud rate는 일반적으로 115200을 사용한다. Microsoft 문서도 직렬 디버깅 시 이 구성을 안내한다.
3. Windbg 로 디버거 연결
호스트 PC에서 windbg를 관리자 권한으로 실행한 후 `kernel 연결 > COM > pipe > \\.\pipe\com1` 를 입력하고 창을 켜놓은 상태에서 VM을 재부팅해준다.
다했는데, 계속 windbg에서 waiting 상태로 나온다?
`bcdedit /set "{current}" testsigning on`
`bcdedit /set "{current}" nointegritychecks on`
`bcdedit /set "{current}" debug yes`
`bcdedit /set "{current}" debugtype serial`
`bcdedit /set "{current}" debugport 1`
`bcdedit /set "{current}" baudrate 115200`
`shutdown /r /t 0`
입력해주면된다.
VirtualKD(VKD)를 이용한 환경 설정 방법
직렬 COM 방식 대신 VirtualKD-Redux를 사용할 수도 있다.
1. VM Windows에 Debugging Setting
https://github.com/4d61726b/VirtualKD-Redux/releases/tag/2024.3
Release VirtualKD-Redux 2024.3 · 4d61726b/VirtualKD-Redux
This release adds ReactOS support to vminstall eliminating the need to manually copy kdcom.dll to system32.
github.com
VirtualKD-Redux-XXXX.X.zip 을 설치한 후 압축해제를 한다.
VirtualKD-Redux-2024.3\target64 경로에 존재하는 vminstall.exe 와 kdcom.dll를 복사하여 VM내부의 Windows에 붙여넣기해준다.

호스트 PC에서 vmmon을 실행시켜준다. (32bit면 vmmon32.exe 실행. 64bit면 vmmon64.exe 실행)
VM내부에서 vminstall.exe를 실행시켜 설치해준다.

2. vmmon64.exe 실행
호스트PC에서 `VirtualKD-Redux-2024.3\vmmon64.exe` 를 실행시켜준다.

원하는 VM을 선택해주면 windbg가 실행된다.
windbg 화면에 Waiting to reconnect...가 나올텐데, 이때 VM을 재시작을 해준다.
3. Boot Manager Setting (VM 재시작시 나오는 화면)

생성된 OS를 선택해주고 `F8`을 눌러 고급 부팅 옵션에 들어간다.

드라이버 서명 적용 사용 안 함을 선택해주면,

~성공~
호스트 PC 에서 vminstall.exe를 구동한 경우
실수로 호스트 PC에 설치한 경우, 자동복구에 실패하여 계속해서 부팅이 안되는 문제가 발생할 수 있다.
0. 콘솔창 열기

문제 해결 > 고급 옵션 > 명령어 프롬프트
1. 부팅 공간 확인
diskpart
list volume
만약, C,D,Z ..등으로 레이블이 설정되어있지 않은 경우에는 `select volume 1` 으로 해당하는 볼륨 인덱스로 선택하고 `set label=Z` 와 같이 수행하여 레이블을 붙여준다.
2. kdcom.dll 설치 공간 찾기
`dir Z:\EFI\Microsoft\Boot\BCD\kd*`
를 입력했을때 kdcom.dll이 나오면 해당 경로를 기억해둔다.
dir Z:\ 이런식으로 입력했을때 해당 dir 내부의 list가 출력되기때문에 이를 참고하여 kdcom.dll을 찾을 수 있다.
3. kdcom_old.dll -> kdcom.dll
`move Z:\EFI\Microsoft\Boot\BCD\kdcom.dll Z:\EFI\Microsoft\Boot\BCD\kdcom_bck.dll`
`move Z:\EFI\Microsoft\Boot\BCD\kdcom_old.dll Z:\EFI\Microsoft\Boot\BCD\kdcom.dll`
혹시모를 문제를 예방하기위해 백업파일을 먼저 생성한 후, 기존의 backup 파일로 덮어준다.
4. integritychecks 설정
`bcdedit /store Z:\EFI\Microsoft\Boot\BCD /set {default} nointegritychecks No`
5. 재부팅 후 integritychecks 설정 초기화
재부팅하면 정상적으로 윈도우가 동작하는 것을 확인할 수 있다.
cmd를 관리자권한으로 열고 `bcdedit /set {default} nointegritychecks No` 를 수행하여 롤백시켜주자.