2013.12.12 23:29

WINGDB


 (register), A (Assemble) , BL (breakpoint List), BC (breakpoint clear), BD(break disable),

BE(breakpoint Enable), BA(Break on Access), BP(set breakpoint) dd(display memory)

dl(display linked list), ds(display string), DT(display type), k (display stack backtrace), e(enter values), s(search memory), r (register), g(go), p(step), pc(step to next call), tb(trace to next branch)


Meta commnad  : 

 - .attach (attach process)

 - .cls(clear)

 - .sympath (symbol path) **중요 윈도우 라이브러리는 항상 해줘야함


key event 

 - ctrl + break : process break (이후 브레이크 포인트로 분석가능)

 - alt + 6 (call stack)

 - f10 : step over f11 : step : out


u + 주소값 = x/i 효과

d + 레지스터 = x/x 효과



windbg 단축키 모음

g, F5 = 실행



Ctrl+Break = 멈추고 디버깅 시작

qd(quit and detach) = 디버기를 계속실행하면서 디버거 종료

.symfix [path] = 심볼파일 경로설정

.sympath = 등록된 심볼파일 경로 출력

.sympath+ [path] = 심볼파일경로 등록 (추가됨)

bl = break point 리스트 출력

bd [breakpoint id] = break point disable

be [breakpoint id] = break point enable

bc [breakpoint id] = break point clear

조건 브레이크 예제

bp [address] ".if @@(pData->dwMyFlag & 0x00010000) {}.else {gc}"

@@(c++코드) 조건이 성립하면 break, 그렇지 않다면 gc 명령어가 실행된다. gc는 F10

과 동일하다. 

k = call stack 출력

kb = call stack 파라메터까지 출력

.srcpath = 소스경로 설정

dv = local 변수 리스트 출력, display value

db [변수이름] = 변수 데이타를 byte단위로 출력한다. display byte, dword..

dd = display dword

bpm r4 address = address위치의 메모리를 read 할때 break

lm = 모듈정보리스트 출력

lmvm [모듈이름] = 특정 모듈 정보 출력 (심볼파일이 설정되었는지 확인할때 필요)

.ecxr = dump파일을 열어볼 때, dump 파일의 레지스터와 스택포인트등 dump파일과

일치시킨다.

!analyze -v = dump파일을 열어서 분석할때 쓰이는 명령어다. 괜찮은듯

!address [변수or주소] = 메모리 속성을 출력한다.

.srcpath = 설정된 소스 경로를 보여준다. 추가하고 싶을때는 .srcpath+ 

.restart = 만약 실행파일로 테스트 중이라면 처음부터 다시 로드해서 시작한다.

~[thread number]s = 해당 쓰레드로 제어를 옮긴다. ex) ~2s = 2번 쓰레드로 이동

~* = 모든 쓰레드 출력

~*k = 모든 쓰레드의 콜스택정보 출력

~*kb = ~*k응용 (콜스택정보를 모두 출력한다. 바이트단위)

!handle [핸들] f = 핸들 정보 출력

dt [data type] [address] = address 에 있는 데이타를 data type 형태로 출력한다. 

특정 데이타를 표현할 때 자주 쓰이는 명령어다. display type

!locks = CriticialSection 과 같은 동기화객체를 출력한다. 어떤 쓰레드에서 소유하고 있는

지도 나오니 Thread Hang 버그를 디버깅할 때 유용하다.

!htrace -enable = handle 이 생성되고 삭제되는 것을 추적한다. disable도 가능

!htrace -snapshot = 현재 handle 상태를 저장한다. 나중에 비교하기 위해서

!htrace -diff = 전에 snapshot으로 저장했던 내용과 지금의 내용과 비교한다. 비교한 

내용 중, 닫힌 handle은 제외하고 남아있는 handle을 출력한다. 

즉, 비교해서 다른 부분 중, 열려있는 것만 출력한다는 의미.

u [address] = 

uf [함수이름] = 함수이름의 위치로 이동해 어셈블리코드로 출력한다.

s [-type] range patter = 메모리 내용을 검색하는 명령어

ex) s 0012ff40 0012ff60 'h' 'e' 'l' 'l' 'o'

ex) s -a 0012ff40 L20 "hello"

dds [Address] = (diplay word and symbols) 지정한 메모리에서 dword값을 읽어서 보여주고

그 값이 어떤 심볼과 연결된다면 심볼을 출력한다. 도움되는 명령어다.

x module!symbol = 함수나 전역변수의 이름을 입력하면 일치하는 심볼과 주소를 표시한다.

.dump option filename = 덤프파일 생성 option=/f, /m

.hh [text] = winDbg 도움말을 띄운다. text는 색인의 에디트창에 나온다. 엔터만 누르면 검색하게+

(open hiper text help)

!object [Address/path/name] = 객체의 정보를 보여준다.

!poolfind = 특정 메모리 태그를 가진 메모리를 찾는다.

ex) !poolfind ddk 0 : ddk 메모리 태그를 비페이징 풀에서 검색한다.

ex) !poolfind * 0 : 모든 태그의 메모리를 비페이징 풀에서 검색한다.



IDA 

Quick View : Ctrl + 1  (문자열 검색시에 용의하다)



Posted by k1rha