WinDbg Reference
WinDbg 디버거 명령어 레퍼런스
WinDbg Reference 소개
WinDbg 명령어 레퍼런스는 Windows 커널 모드 및 사용자 모드 디버깅의 핵심 도구인 Microsoft WinDbg의 필수 명령어를 다루는 검색 가능한 빠른 참조입니다. 기본명령(g, p, t, r, u, lm, x), 메모리(db/dw/dd/dq 표시, da/du 문자열, eb/ed 수정, s 검색, !address 영역 정보), 브레이크포인트(bp 소프트웨어, bu 지연, ba 하드웨어, bl/bc/bd/be 관리, bp /1 일회성), 스택(k 콜 스택 변형, .frame 전환, dv 로컬 변수, !analyze -v 크래시 분석), 커널(!process, !thread, !irql, !pte), 확장(.load, !heap, !handle)의 6개 카테고리로 구성되어 있습니다. 각 항목에는 명령어 구문, 간결한 설명, 실제 사용 패턴을 보여주는 예제가 포함됩니다.
WinDbg는 Windows 드라이버 개발, 크래시 덤프 분석, 저수준 보안 연구에 필수적입니다. 블루스크린(BSOD)이 발생하면 !analyze -v 명령으로 장애 모듈, 예외 코드, 콜 스택을 자동 식별합니다. 리버스 엔지니어는 디스어셈블리(u/uf), 메모리 표시(db/dd), 브레이크포인트 명령어로 사용자 모드 응용 프로그램과 커널 드라이버의 실행 흐름을 추적합니다. 하드웨어 브레이크포인트(ba)는 코드를 수정하지 않고 특정 메모리 주소의 읽기, 쓰기, 실행 접근을 감시할 수 있어 패킹된 악성코드나 자기 수정 코드 분석에 핵심적입니다.
이 레퍼런스는 사용자 모드와 커널 모드 디버깅 시나리오를 모두 다룹니다. 커널 섹션에는 프로세스 열거(!process 0 0), 스레드 상태 검사(!thread), 현재 IRQL 확인(!irql), 페이지 테이블 엔트리 조사(!pte) 명령어가 포함됩니다. !heap 같은 확장 명령으로 메모리 누수 및 손상을 감지하는 힙 할당 분석이 가능하고, !handle로 리소스 누수 조사를 위한 시스템 핸들 열거가 가능합니다. 모든 콘텐츠는 즉시 검색 필터링, 다크 모드 지원, 서버 처리 없이 브라우저에서 탐색할 수 있습니다.
주요 기능
- WinDbg 기본 명령어 완전 수록: g(실행), p/t(스텝), r(레지스터), u(디스어셈블), lm(모듈), x(심볼 검색)
- 메모리 명령어: byte/word/dword/qword 표시(db/dw/dd/dq), 문자열 표시(da/du), 편집(eb/ed), 패턴 검색(s)
- 브레이크포인트 전체 레퍼런스: 소프트웨어(bp), 지연(bu), 하드웨어 감시점(ba r/w/e), 관리(bl/bc/bd/be), 일회성(bp /1)
- 스택 분석 명령어: 콜 스택 변형(k/kn/kv/kb), 프레임 전환(.frame), 로컬 변수(dv), 크래시 분석(!analyze -v)
- 커널 디버깅 명령어: 프로세스 목록(!process), 스레드 정보(!thread), IRQL 확인(!irql), 페이지 테이블 엔트리(!pte)
- 확장 명령어: 힙 분석(!heap -s/-stat/-flt), 핸들 열거(!handle), 모듈 로드(.load sos/mex)
- 실제 디버깅 패턴과 자주 사용되는 플래그 조합을 보여주는 실용적인 예제
- 서버 통신 없이 모든 WinDbg 명령어를 카테고리 기반 필터링 및 즉시 검색
자주 묻는 질문
이 레퍼런스에서 어떤 WinDbg 명령어를 다루나요?
6개 카테고리를 다룹니다: 기본명령(g, p, t, r, u, lm, x로 실행 제어, 레지스터, 디스어셈블리, 모듈, 심볼 검색), 메모리(db/dw/dd/dq 표시, da/du 문자열, eb/ed 편집, s 검색, !address 정보), 브레이크포인트(bp 소프트웨어, bu 지연, ba 하드웨어, bl/bc/bd/be 관리, bp /1 일회성), 스택(k 콜 스택, .frame, dv 로컬, !analyze -v), 커널(!process, !thread, !irql, !pte), 확장(.load, !heap, !handle)입니다.
WinDbg에서 하드웨어 브레이크포인트는 어떻게 설정하나요?
ba(break on access) 명령에 접근 유형, 크기, 주소를 지정합니다. 예: ba r4 0x00403000은 해당 주소의 4바이트 읽기 접근을 감시하고, ba w4 0x00403000은 쓰기 접근, ba e1 0x00401000은 실행을 감시합니다. 하드웨어 브레이크포인트는 CPU 디버그 레지스터를 사용하여 코드 메모리를 수정하지 않으므로, 읽기 전용 메모리 디버깅이나 자기 수정 코드 탐지에 필수적입니다.
WinDbg에서 bp와 bu의 차이점은 무엇인가요?
bp는 현재 유효한 주소로 즉시 해석되는 소프트웨어 브레이크포인트를 설정합니다. bu는 지정된 모듈이 로드될 때 활성화되는 지연(미해석) 브레이크포인트를 설정합니다. 대상 DLL이나 드라이버가 아직 로드되지 않았을 때 bu를 사용하세요. 예를 들어 bu mymodule!MyFunction은 mymodule.dll이 프로세스에 로드될 때 자동으로 브레이크포인트를 설정합니다. DLL 초기화 및 드라이버 로드 루틴 디버깅에 필수적입니다.
WinDbg로 크래시 덤프를 어떻게 분석하나요?
덤프 파일(.dmp)을 WinDbg에서 열고 !analyze -v를 실행합니다. 이 명령은 예외 코드, 장애 명령어, 장애 모듈을 자동 식별하고 재구성된 콜 스택을 제공합니다. 커널 모드 크래시(BSOD)의 경우 버그체크 코드도 표시합니다. 초기 분석 후 k로 콜 스택 확인, r로 레지스터 값 확인, db/dd로 장애 주소 주변 메모리를 검사합니다.
프로세스 메모리에서 문자열을 어떻게 검색하나요?
s(검색) 명령에 ASCII는 -a, Unicode는 -u를 사용합니다: s -a 0 L?80000000 "password"는 전체 2GB 사용자 모드 주소 공간에서 ASCII 문자열 "password"를 검색합니다. 바이트 패턴의 경우 s -b를 사용합니다: s -b 0 L?80000000 4d 5a는 MZ 헤더 시그니처를 검색합니다. L? 접두사는 주소를 끝 주소가 아닌 길이 제한으로 사용합니다.
WinDbg에서 k 변형들은 각각 무엇을 보여주나요?
기본 k 명령은 반환 주소와 함수명이 포함된 콜 스택을 표시합니다. kn은 .frame N에 사용할 프레임 번호를 추가합니다. kv는 처음 3개 함수 파라미터와 FPO 데이터를 포함합니다. kb는 처음 3개 스택 파라미터를 16진수로 표시합니다. kn으로 프레임 번호를 확인한 후 .frame N으로 컨텍스트를 전환하고 dv로 해당 프레임의 로컬 변수를 확인합니다.
커널 모드 디버깅에도 이 레퍼런스를 사용할 수 있나요?
네. 커널 카테고리에서 핵심 커널 디버깅 명령어를 다룹니다: !process 0 0은 모든 프로세스를 나열(상세도 플래그 0-7), !thread는 ETHREAD 주소를 포함한 스레드 정보 표시, !irql은 현재 인터럽트 요청 수준 표시, !pte는 가상-물리 주소 변환을 위한 페이지 테이블 엔트리를 조사합니다. 이 명령어들은 시리얼, USB, 네트워크로 대상 머신이나 VM에 연결된 커널 디버깅 세션이 필요합니다.
이 레퍼런스 사용 시 데이터가 서버로 전송되나요?
아닙니다. 전체 레퍼런스 데이터셋은 페이지에 내장되어 클라이언트 사이드로 렌더링됩니다. 검색, 필터링, 탐색 모두 JavaScript로 브라우저 내에서만 이루어집니다. WinDbg 명령어, 메모, 검색 쿼리가 어떤 서버로도 전송되지 않습니다.