sweetchip's blog



매번 똑같이 오랜만의 포스팅..


요즘은 커널에 대해서 공부하고 있습니다.


아니나 다를까 공부에는 항상 삽질이 따르네요.


VMware의 Workstation과 Vsphere에서 커널디버깅을 시도해보려고 구글링도 해보다가 실패해서 이것저것 삽질하던 도중 드디어 해결하게 되었습니다.


나중에 까먹을까봐 다시 포스팅!


우선 BOB 할때 알렉스에게 받은 Windbg 파일..


아래 file1, file2 둘중 아무거나 받으시면 됩니다. 같은거에요

===============================

file 1


kdbg.7z.001


kdbg.7z.002


kdbg.7z.003


kdbg.7z.004


==============================

file 2


kdbg.zip.001


kdbg.zip.002


kdbg.zip.003


kdbg.zip.004



윈도우 XP에서의 커널 디버깅 환경 세팅

- Windows XP

- VMware Workstation 11


1. 윈도우XP가 깔린 VM이미지의 속성을 들어간다.




2. 위와 같이 설정에 들어갔으면 아래 Add 버튼을 누른다.





그리고 시리얼 포트를 선택하고 Next를 누른다.


다음 화면은 귀찮아서 캡쳐 실패. 그런데 그냥 텍스트로 적어도 무방할 것 같다.


3. Serial Port 설정에서 'Output to named pipe' 선택 후 Next 클릭

4. Named pipe에 '\\.\pipe\name' 식으로 파이프의 이름을 만들어준다. 예를들어서 '\\.\pipe\sweetchip' 도 좋다.

4-1. 그리고 This end is the client. 와 This other end is an application 각각 선택!



그래서 설정을 살펴보면 이렇게 되도록 한다.


체크할 부분은 Use named pipe와 I/O mode이다.


5. 마지막! I/O mode의 Yield CPU on poll을 체크한다.




그러면 VM웨어에서의 세팅을 마쳤다. 이제 XP에서 설정해보자.


6. XP의 시작 - 실행 - msconfin 입력


7. 시스템 구성 유틸리티의 BOOT.INI 탭 선택


8. 하단 고급 옵션 클릭.



9. 그리고 /DEBUG 체크, /DEBUGPORT, /BAUDRATE 체크


10. 각각 설정을 위 사진처럼 설정. (디버그 포트는 COM1번, BAUDRATE는 115200)


Windows XP에서의 설정은 마쳤고 마지막으로 windbg에서 설정을 해야한다.


Windbg의 설정은 공통설정에서 하겠다.


11. 공통으로 이동



윈도우7 에서의 커널 디버깅 환경 세팅

1. 우선 Windows 7에서 설정을 해줘야 한다.

- XP에서와 마찬가지로 시작 - 실행 - msconfig 입력

- 부팅 탭에서 고급옵션 클릭

- 고급 옵션 창에서 디버그, 디버그 포트, 전송속도 체크아래와 같이 설정



2. 그리고 윈도우7의 전원을 끈다.



3. VMware에서 이미지의 속성을 들어간 뒤 하드웨어의 장치를 추가해줘야 한다.

- Virtual Machine Settings에서 Add 클릭

- Serial Port 클릭 후 Next

- Named Pipe에 위와 같이 설정.

- 파이프 이름 설정 - \\.\pipe\name (파이프 이름의 경우는 자유, 위 사진처럼 자유로 설정.)



4. 그리고 I/O mode에서 Yield CPU on poll 체크


5. 공통으로 이동




[공통] Windbg에서 커널 디버깅하기


1. Windbg의 상단탭 File - Kernel Debugging에 들어간다.





2. COM 탭 클릭후 아래 사진처럼 세팅한다.



3. VMware에서 VM 시작을 누르면..


4. 성공




성공이다!. 사진에서는 Windows XP인데 7이면 Windows 7 이라고 나온다





만약 위와 같은 과정으로 설정 해도 실패할 경우 아래를 살펴보세요,


지금까지 위처럼 해도 디버기가 디버거에 안붙길래 도데체 무슨 일이지 하고 있던 차에 무언가 이상한 것을 발견했다.


위의 경우는 Serial Port를 추가하면 이름은 Serial Port이다.


그러나 나의 경우는 Serial Port 2 라고 이름이 생성되었다. 그 말인 즉, 어떤 장치가 이미 시리얼 포트를 쓰고 있던 것이다.


범인은 바로 프린터(Printer)가 COM1를 사용하고 있었고 이 친구 덕분에 위 설정으로는 디버기가 붙지 않게 되었다.


그러므로 VM에서 프린터가 쓸 일이 없다면 COM1 포트를 사용하기 위해서 과감하게 삭제 하고 붙이면 잘 작동 할 것이다.


허무.. 어쨋든 이제야 잘 붙는다 오예!


끝.

신고

Comment 3