windbg 사용법 (WinDebug)

WinDbg란?!

마이크로 소프트에서 배포하는 마이크로 소프트 윈도우의 다목적 디버거

유져모드 어플리케이션, 드라이버 및 커널모드에서 자체 운영체제 디버깅을 할 수 있다.



난 보통 덤프 파일 분석을 위해 사용하기에 덤프파일 분석을 위한 디버깅을 소개한다.


[덤프 디버깅]

1.유져모드 덤프 디버깅

2.커널모드 덤프 디버깅


(언제 다 정리하지?!)


[디버깅 방법]

1.심볼을 연결한다  (pdb파일이 있는 경로로 설정) (tip:웬만하면 경로는 영문명으로 하자)

2.소스코드를 연결한다.(안해도 콜스택정도는 나옴)

3.각종 명령어를 통해 분석할 수 있다.



[명령어]

k : 콜스택 보기

.ecxr : 예외가 발생한 상황에 저장된 컨텍스트 레코드를 보여준다(eax, ebx, ecx 등등...)

!analyze -v : Windebug가 자동분석을 해서 많은 정보를 보여준다.

u 주소값: 어셈보기



Command option usage Desc
종료      
q     디버깅 종료
qd     디버깅 종료;연결해제
디버깅 환경정보      
vertarget     타겟 컴퓨터 정보 표시
version     디버그 환경 정보 표시
.lastevent     마지막 디버그 이벤트 정보 표시
||     디버깅 세션 정보 표시
sumble & sorurce      
.symfix     MS 심볼경로 설정
.sympath     심볼경로 확인/설정
.sym noisy     심볼파일 검색 과정을 출력
.srcpath     소스경로 설정
.srcnoisy   .srcnoisy 1 소스경로 검색 과정을 출력
모듈      
lm   l 로드된 모듈만 표시
    m [pattern] 패턴과 일치되는 모듈만 표시
    v 모듈 상세정보 표시
!lmi !lmi ntdll.dll   모듈 상세정보 표시
.reload   /f [m_name] 심볼을 즉시 로드
x X ntdll!* /v 심볼 타입을 표시.
  X *!*abc* /t 데이터 타입을 표시
    /n 이름순으로 정렬
ln   ln [address] 해당 주소에 근접한 심볼의 정보 표시
레지스터      
r     레지스터 정보 표시
r $proc     현재 프로세스의 PEB주소( user-mode)
      현재 프로세스의 EPROcESS주소( kernel-mode)
r $thread     현재 스레드의 TEB주소( user-mode)
      현재 스레드의 ETHREAD주소( kernel-mode)
r $tpid     현재 프로세스 ID(PID)
r $tid     현재 스레드 ID(TID)
언어셈블      
u     언어셈블
    f 언어셈블(함수전체)
    b 언어셈블(ip이전의 8개 명령어)
콜스택      
k   [n] 콜스택 정보표시
    p 함수정보 출력
    b 인자표시
    n 프레임번호
    v FPO정보 표시
    f 스택 사용량 표시
break point      
bp bp 0x123456   bp 설정
bl     bp 리스트 출력
bc bc * | [frame_no]   bp 삭제
bd,be bc * | [frame_no]   bp disable/enable
bm bm notepad!*Win*   패턴과 일치하는 모든심볼에 bp설정
bu bu aaa!bbb   로드되지 않은 심볼에 대한 bp설정
ba     특정 주소에 access시 bp
지역변수      
dv dv modulr!test*    
    /i 심볼유형과 인자유형 표시
    /V 변수저장 위치 표시( register or address )
데이터유형      
dt df _EPROCESS 0xaddr   주소를 특정 데이터 형으로 변환해서 표시
du     Unicode string 표시
da     Ansi string 표시
dc      
db      
dy      
       
!address !address    
  !address [address]    
프로세스 & 스레드 정보      
!peb     PEB(Process Environment Block)표시
!teb     TEB(Thread Environment Block) 표시
       
!gle     API의 마지막 에러코드 표시
실행 제어      
t     Trace
~.t     다른 스레드를 중지시킨 상태에서 하나의 statementt실행
g      
p     Step Over
gu gu   현재함수가 복귀할 때 까지 실행
  ~0 gu   스레드 0을 제외한 모든 스레드를 freeze함
wt     내부에서 호출된 함수와 함수호출 횟수등의 정보 표시
.cxr     컨텍스트 변경
!ready      
.thread      
!thread      
.trap      
.process      
!process      
ed      
eb eb .-6 90 90 90 90 90 90   6byte를 NOP(0x90)으로 변경
!error !error [error code]   에러코드 정보표시


이 글을 공유하기

댓글

Designed by JB FACTORY