'Develop'에 해당되는 글 74건

  1. Windows Vista Kernel Remote Debugging 팁들(Tips) 2010.01.12
  2. wmware + windbg 연결 사용 2010.01.12
  3. WinDbg, VM 디버깅 설정 2010.01.07

Windows Vista Kernel Remote Debugging 팁들(Tips)

리버스 엔지니어링 2007/10/29 17:15

사용자 삽입 이미지
Vmware에서 윈도우즈를 리모트 디버깅하기 위한 방법은 Lord Of Ring0: Driver Debugging with WinDbg and VMWare에서 소개 되었다. 필자도 해당 방법을 통해서 드라이버 개발과 디버깅 시에 많은 수고를 덜어 왔다.

하지만달전 Vista에서 드라이버 개발을 처음 시작할 때에 가장 황당했던 것이 리모트 디버깅의 세팅이었다. 간단하게 boot.ini에서 다음 스트링을 추가해 주면 되었던 것이 복잡한 명령어들을 사용하도록 바뀐 것이다.


/debugport=com1 /baudrate=115200




간단한 구글링을 통해서 Debugging Windows Vista라는 문서를 찾았고, 사실 문서 내용이 장황하지만, 간단하게 다음 예제처럼 따라 하면 금방 원하는 디버깅이 활성화된 부트 엔트리를 생성할 수 있다.

C:\Windows\system32>bcdedit /copy {current} /d DebugEntry

The entry was successfully copied to {919494ed-866b-11dc-bcb1-000c294d72db}.



C:\Windows\system32>bcdedit /debug {919494ed-866b-11dc-bcb1-000c294d72db} ON

The operation completed successfully.



C:\Windows\system32>bcdedit /default {919494ed-866b-11dc-bcb1-000c294d72db}

The operation completed successfully.



론 중간의 {} 사이의 랜덤 문자열은 때에 따라서 변하므로 주의해야 한다.



또 한가지 windbg의 명령행에서 Lord Of Ring0: Driver Debugging with WinDbg and VMWare의 예제는 resets=0를 지정하여 사용하지만, Vista의 경우에는 어떠한 이유에서인지 해당 값을 1로 세팅해서 사용해야만 했다.

"C:\Program Files\Debugging Tools for Windows\windbg" -b -k com:pipe,port=\\.\pipe\com_1,resets=1



Vista에서 커널을 후빌 수 있는 만반의 준비가 된것이다.



,
,
VMWare 에서 할일! 시간상 글로 대체..
1. VMWare자체 메뉴에서 하드웨어추가 마법사(Add Hardware Wizard)를 이용해서
    Serial Port를 추가한다..

2. 이후 화면에서 Output to named pipe를 선택한다.

3. 각 칸에 
\\.\pipe\com_1
This end is the server.
The other end is an application.


채워넣고.. 다음항목에 체크한다.
Connect at power on

4. Virtual Machine Settings로 들어가서

I/O mode 항목의
Yield CPU on poll 에 체크를 해준다.

5.VMWare의 OS의 boot.ini(윈도우의 경우)를 수정한다.
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional - Debug" /fastdetect /debugport=com1 /baudrate=115200

물론 직접 라인을 수정해도 되고.. 아니면 한줄 추가로 더 만들어서 선택 이용 할수도 있을것이다.

WinDbg 에서 할일!
1. 물론 WinDbg를 설치해야겠지..-_-;; (WDK를 깔때보면 옵션에 있음)

2. 디버깅 심볼을 수동으로 설치한다.
  http://www.microsoft.com/whdc/DevTools/Debugging/symbolpkg.mspx
 C:\Windows\symbols 에 깔리게 될텐데..
 File -> SymbolFilePath에 C:\Windows\symbols 경로를 추가해준다.
※ 자동으로 심볼서버에서 디버깅심볼을 받으려면
심볼서버에서 받은 디버깅심볼을 저장할 폴더를 하나 만들고
그 경로를 File -> SymbolFilePath에 srv*저장할 폴더경로*http://msdl.microsoft.com/download/symbols
이라고 적어준다. 이러면 나중에 DMP파일을 분석할때 DMP파일에 맞춰서 디버깅심볼이 다운로드 된다.
참고로 DMP파일은 윈도우의 설정에 따라 안생길 수도 있으니 주의해야한다.


3. 내컴퓨터 -> 속성 -> 고급 -> 시작 및 복구 -> 디버깅정보 쓰기(전체 메모리 덤프) 로 설정한다.
c:\windows\minidump가 생성될 것이다.

4. WinDbg의 바로가기 아이콘의 속성을 클릭!
대상에 C:\WinDDK\7600.16385.0\Debuggers\windbg.exe 이와 비슷하게 써있을것이다..
저걸 수정할 필요는 없다.. 단! 요놈뒤에 한칸띄고
C:\WinDDK\7600.16385.0\Debuggers\windbg.exe -b -k com:pipe,port=\\.\pipe\com_1
저렇게 추가를 해야 .. VM에 생성된 시리얼포트를 통해 OS의 파이프 통신이 성립된다.

5. VMOS에서 디버깅 모드로 부팅할때 Windbg를 동작 시키면? 멈춘다..
커널과의 대화를 시작한다.

,