Windbg 명령중 조건BP 와 변수 출력

Windbg 를 사용하다 보면 어떤 변수의 값이 특정 값일 경우 BP 를 설정하고 싶은 경우가 있을 것 입니다.

아래 명령의 경우 MyFunc 에서 MyVar 이 20 보다 클 경우 멈추고 작을 경우 go 하는 것입니다.

bp MyDriver!MyFunc "j (poi(MyVar)>0n20) ''; 'gc' "

두번째 팁은 위의 명령을 조금 확장한 것입니다. @@ 를 사용하면 C++ 표현식을 사용할 수 있는데 || 를 사용하여 여러개의 조건을 사용할 수 있으며 kb 10 명령을 사용하여 스택 10개를 찍고 .echo 명령으로 메시지를 찍을 수 있습니다.

bu MyDriver!MyAlloc "j @@((nSize==0x10)||(nSize==0x14)||(nSize==0x38)||(nSize==0x4)) 'kb 10;.echo Hit 1';'gc'"

 

세번째 팁은 보통 메모리 할당 함수를 하나 만들어서 메모리 할당을 시키는 경우가 많을 것입니다.
그런데 메모리 릭이 발생하여 Verifier 가 BSOD 를 발생하였을때 메모리 할당 함수를 직접 만들었을 경우
Caller Address 가 모두 같을 것 입니다. 이를 매번 BP 를 걸어서 확인한다는 것은 거의 불가능 한데
이때 아래와 같이 하면 자동으로 메모리 할당시에 BP 가 걸리고 스택을 3개 보여준 후 go 하게 됩니다.

 

bu MyDriver!MyAlloc "?? nSize;kb 3; g"

 

WinDbg 의 세계는 정말 멀군요 ^^;