덤프 분석을 위한 명령어.
WinDbg 에는 3 종류의 명령어가 있다.
- 일반 명령 : 일반적으로 사용하는 디버깅에 관련된 명령어 들이다. 브레이크 설정(bp), 타겟 제어(p,g) 등등
- 메타 명령 : 디버거에 관련된 명령이다. 명령어 앞에 . 이 붙는다. 디버깅 심벌 경로 설정 (.sympath ), 모듈 심벌 로드 (.reload ) 등등
- 확장 명령 : 외부 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 |
'IT이야기 > OS' 카테고리의 다른 글
Cluster Log 파일 생성하는 명령 (0) | 2016.01.12 |
---|---|
가상 VHD 파일 사이즈 압축 (0) | 2016.01.08 |
dsquery, dsmod 사용 방법 (0) | 2015.06.10 |
Error Codes list for Microsoft technologies (MS 전체 error 코드) (0) | 2015.05.19 |
CSVDE 툴로 사용자의 AD값 추출 하자 (0) | 2015.05.18 |