windbg 사용법 (WinDebug)
- 프로그래밍
- 2013. 9. 26. 13:03
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] | 에러코드 정보표시 |
이 글을 공유하기