본문 바로가기

Windows Debugging

(4)
Bugcheck 0xD6 드라이버 확인 프로그램(Driver Verifier)이 오류를 발견했을 때 발생시키는 버그체크 중 하나인 0xD6을 살펴보자. 책의 부록으로 첨부된 MEMORY.dmp 파일을 Windbg로 로드한다. 심볼과 소스코드 경로를 설정해준 뒤 !analyze -v 를 실행해보자. kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCAT..
어셈블리와 스택의 이해 어셈블리 코드를 잘 모르거나 어려워하는 사람은 많다. 나 역시 그러한데 대학교에서 깊게 배우지도 않았고, 첫 직장에서도 리눅스 통신 애플리케이션 개발을 했기 때문에 어셈블리 코드와 마주칠 일이 많지 않았다. 직장을 옮기고 나서 윈도우 덤프 분석을 하다 보면 어셈블리 코드와 마주칠 일이 많았는데, 잘 모르니 그냥 지나치게 되고 심볼과 소스 코드에 의존한 디버깅을 해왔다. 스스로 한 걸음 성장하기 위해서는 어셈블리 코드에 대한 공부를 해봐야겠다고 생각했다. 현재 공부 중인 Windows Debugging 2/e 책의 '4.2장 어셈블리와 스택의 이해'를 읽고 그 내용을 포스팅으로 정리하면서 조금씩이라도 이해하려고 노력하고자 한다. 어셈블리 기초 어셈블리 코드를 잘 모르거나 어려워하는 사람들이 많으므로 어셈블..
커널모드 라이브 디버깅 MyDrv.sys 라는 커널모드 드라이버를 디버깅해보는 것을 생각해보자. 이런 커널모드 라이브 디버깅을 하면 MyDrv.sys 뿐만 아니라 운영체제 커널까지 디버깅할 수 있다. 이를 통해 윈도우 커널이 어떻게 생겼는지 구경할 수 있는 기회가 제공된다. 커널모드 디버깅은 이름에서 알 수 있듯이 윈도우 커널 자체를 디버깅하는 것이다. 디버거로 운영체제 커널을 디버깅하려고 멈춘다면 시스템 전체가 멈춰버린다. 따라서 디버기 시스템을 멈추면 시스템 전체가 멈춰 버리므로 디버거를 같은 시스템에서 동작시킬 수는 없다. WinDbg는 호스트(디버거 시스템)와 타겟(디버기 시스템)을 연결하는 방법으로 네트워크, 시리얼, IEEE 1394, USB 네 가지를 지원한다. 요즘은 개발 환경에서 VMWare나 VirtualBo..
유저모드 라이브 디버깅 유저모드 라이브 디버깅이란 특정 프로세스를 라이브 디버깅하는 것이다. 흔히 소프트웨어를 개발할 때 사용하는 비주얼 스튜디오를 통해 디버깅을 할 수 있음에도 WinDbg를 사용함으로써 얻는 장점은 무엇이 있을까? ※ WinDbg는 "Debugging Tools for Windows" 를 의미하며 흔히 "윈디비지" 정도로 읽는다. WinDbg는 명령 입력을 지원하므로 각종 디버깅 명령을 사용할 수 있다. 프로세스, 스레드 정보, 모듈 정보, 버전 정보, 메모리 등을 WinDbg가 제공하는 명령으로 쉽게 조회할 수 있으므로 세세한 디버깅을 할 수 있다. 이미 실행 중인 프로세스에 붙여서 디버깅할 수 있다. 서비스 같은 것을 디버깅할 때 유용하다. 비주얼 스튜디오 같이 비교적 무거운 툴 없이도 디버깅이 가능하다..