반응형

http://darpangs.tistory.com/entry/WinDbg-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC-1




간단하게 내가 자주 사용하는 명령어들을 정리해보았다.

 

WinDbg 에는 3 종류의 명령어가 있다.

  1. 일반 명령 : 일반적으로 사용하는 디버깅에 관련된 명령어 들이다. 브레이크 설정(bp), 타겟 제어(p,g) 등등
  2. 메타 명령 : 디버거에 관련된 명령이다. 명령어 앞에 . 이 붙는다. 디버깅 심벌 경로 설정 (.sympath ), 모듈 심벌 로드 (.reload ) 등등
  3. 확장 명령 : 외부 dll 로 제작된 명령이다(일종의 플러그인 ). 명령어 앞에 ! 이 붙는다. 예외상황분석( !analyze –v ) , 프로세스 구조체 보기 ( !peb ) 등등

 

구분

명령어

설명

예제

도움말 보기

.hh

도움말을 연다.

.hh .reload

// .reload 명령어에 관한 도움말을 열어본다

 

경로 설정

.sympath

디버깅 심벌 위치 디렉토리 설정

.sympath+ d:\work\bin

.srcpath

소스 파일 위치 디렉토리 설정

.srcpath+ d:\work\src

.symfix

웹 디버깅 심벌 서버 설정.

.symfix+ c:\symbols

디버깅 심벌 로딩하기

.reload

디버깅 심벌을 로드한다.

( 이 명령어는 디버깅 심벌을 준비해놓는다고 보면 될거 같다. 기본적으로 WinDbg 는 deferred symbol loading 을 수행하는데, 당장 쓰이지 않으면 디버깅 심벌을 로딩해 놓지 않는다. )

주의사항은 확장자를 붙여야 한다는것.

.reload darpangs.sys

// 디버깅 심벌 로드

 

.reload /u darpangs.sys

// 디버깅 심벌 언로드

 

.reload /i darpangs.sys

// 디버깅 심벌 강제 로드

ld

디버깅 심벌을 로드한다.

( deferred loading 된 디버깅 심벌들을 실제로 로딩한다. )

주의사항은 확장자 없이 사용한다는 것

ld darpangs

로딩된 모듈 및 디버깅 심벌 보기

lm

List Loaded Modules

현재 로딩 되어 있는 모듈들을 본다.

lmm *darpangs*

// darpangs 글자가 들어간 모듈 나열

 

lmv

// 상세 정보 표시

 

lml

// 디버깅 심벌이 로딩된 모듈만 표시.

쓰레드 보기

~

쓰레드 정보를 본다.

~*

// 모든 쓰레드를 표시한다.

 

~5

// 5번 쓰레드를 표시한다.

 

~1s

// 1번 쓰레드를 현재 쓰레드로 설정한다.

 

~#

// 예외를 일으킨 쓰레드를 본다.

스택 보기

k

현재 쓰레드의 스택을 본다.

kb

// 스택 상황을 파라미터와 함께 본다.

 

kn

// 스택 프레임 번호를 함께 본다.

 

kf

// 스택 프레임 간격을 함께 본다. 이 기능은 로컬 스택의 크기를 알 수 있다.

심벌 보기

x

특정 모듈의 심벌을 본다.

x ntdll!*create*

// ntdll 의 심벌(변수나 함수)중 create 이라는 단어가 들어간 것을 표시한다.

자료 구조 보기

dt

데이터 타잎을 본다.

디버깅 심벌이 로딩되어 있을 경우, 구조체의 정보를 보여준다.

dt ntdll!*list*

// ntdll 의 구조체 중 list 단어가 들어간 것을 모두 보여준다.

 

dt ntdll!_LIST_ENTRY

// ntdll 의 구조체 중 _LIST_ENTRY 구조체의 구성을 보여준다.

 

dt ntdll!_LIST_ENTRY 0x12345678

// 0x12345678 메모리의 데이터를 _LIST_ENTRY 구조체로 맞추어서 보여준다.

 

dt ntdll!_LIST_ENTRY 0x12345678 –r2

// 구조체 내부에 또 다른 구조체가 있을 경우, 해당 구조체의 내용도 표시해준다. 2단계까지 내용을 표시한다.

메모리 보기

d

메모리의 값을 각 형태에 맞게 본다.

 

dd

 

dd 0x12345678

// 0x12345678 메모리의 데이터를 Double Word 형태로 출력한다.

db

 

db 0x12345678

// 0x12345687 메모리의 데이터를 Byte 단위 및 ASCII 문자 형태로 출력한다.

du

 

du 0x12345678

// 유니코드 형태로 출력한다.

브레이브 포인트

bp

브레이크 포인트 설정

bp ntdll!NtCreateFile

// ntdll.dll 의 NtCreateFile 함수에 브레이크 포인트를 건다.

bu

브레이크 포인트 설정 ( 심벌 이름으로 )

bu ntdll!NtCreateFile

// ntdll.dll 의 NtCreateFile 함수에 브레이크 포인트를 건다.

아직 로딩되지 않은 모듈에 브레이크 포인트를 설정할 수 있으며, 모듈이 언로드 되거나 WinDbg 가 종료되더라도 브레이크 포인트 설정이 계속 유지된다.

bl

브레이크 포인트 리스트 보기

bl

bc

브레이크 포인트 모두 제거

bc

bd

브레이크 포인트 비활성화

bd 5

// 5번 브레이크 포인트 비활성화

be

브레이크 포인트 활성화

be 1-4

// 1번부터 4번까지의 브레이크 포인트 활성화

ba

메모리 브레이크 포인트 설정

ba w4 0x12345678

// 0x12345678 주소가 Writing 되는 시점에 브레이크가 걸린다.

 

ba r4 0x12345678

// 0x12345678 주소가 Reading 되는 시점에 브레이크가 걸린다.

브레이크

실행 제어

 

( .hh Controlling the Target )

F9 키 ( bp )

현재 src 창이나 disassembly 창의 라인에 브레이크 포인트 설정

Visual Studio 와 동일

F10 키 ( p )

src 나 disassembly 의 한라인 실행

Visual Studio 와 동일

F11 키 ( t )

함수호출 시, 함수 내부 추적.

Visual Studio 와 동일

Shift + F11 키 ( gu )

현재 함수 종료까지 실행

Visual Studio 와 동일

   
   

오류 분석

!analyze

현재 예외 상황의 원인을 분석한다.

!analyze -v

    

 

Posted by 외계달팽




http://www.duck.pe.kr/172


  • Thread 관련
    • ~ : thread 목록 보기
    • ~#s: #번째 thread로 focus(?) 변경
    • ~#k: #번째 thread의 스택 상황 보기
  • breakpoint 관련
    • bu: 심볼에 breakpoint 설정 -- bu module!symbol name
      • ex) bu USER32!MessageBoxW
    • bl: 설정된 브레이크포인트 목록 보기
    • bc: 주어진 번호(bl로 봤을때..)의 브레이크포인트를 제거
    • ba: address에 breakpoint 걸기 -- ba Access Size [Address]
      • ex) ba e1 0xXXXXXXXX -> e는 execute이고 e일때 Size는 반드시 1이어야 함.
    • bp 0041xxxxxx 브레이크 포인트 설정.
  • disassemble 관련
    • uf: symbol을 disassemble
      • ex) uf win!WndProc+0x19b
    • u: address를 disassemble
      • ex) u 0xXXXXXX [L(-)#] -- #만큼 이후(이전) 코드 disassemble
  • memory 관련
    • du: unicode 문자열
    • da: ASCII 문자열
  • Symbols 관련
    • lm: 현재 로드된 심볼의 목록
    • ld, .reload: 심볼 load/unload관련
      • ex) ld ntdll
      • x: 심볼 목록 보기
        • ex) x USER32!Message* -- Message로 시작되는 User32의 모든 심볼 목록 보기
      • .reload : Symbol reload
    • kb : web symbol loading 하기
  • Debugging 관련
    • k: 현재 스레드의 callstack 보기
    • r: 현재 스레드의 register상태 보기





* 표로 구분해놓은 명령어
WinDbg 명령어
                                                                                                                                                              출처         

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!*

X *!*abc*

/v

/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

f

콜스택 정보표시

함수정보 출력

인자표시

프레임번호

FPO정보 표시

스택 사용량 표시

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


6byteNOP(0x90)으로 변경

!error

!error [error code]


에러코드 정보표시



반응형

+ Recent posts