'2014/05'에 해당되는 글 1건

  1. 2014.05.14 [WinDbg 사용] 언로드된 모듈에 의한 덤프 분석 3
WinDbg 디버깅2014. 5. 14. 23:35
반응형

사용중이던 모듈이 갑자기 언로드되어 버린 후 해당 모듈의 함수가 호출되어 크래시가 발생하는 경우가 있다.


이런 경우 WinDbg는 콜스택을 다음과 같이 보여준다.


   1 Id: 15f0.45c Suspend: -1 Teb: 00007ff7`e7d6e000 Unfrozen

Child-SP RetAddr : Args to Child : Call Site

00000000`042cf890 00000000`00000000 : 00007ffb`083243a3 00000000`00000000 00000000`5c7bcabc 00000000`03949738 : <Unloaded_MyTest.dll>+0x117ae3


언로드된 이후의 상태라 어떤 함수인지 확인이 불가능하다.


이런 경우 해당 바이너리 파일과 심볼 파일을 가지고 있다면 WinDbg에 다시 로드해 분석을 진행할 수 있다.

먼저 C:\MyImage에 MyTest.dll, MyTest.pdb를 넣어 놓고 다음과 같이 심볼 경로, 이미지 경로를 설정해 준다.


0:000> .sympath+ C:\MyImage

0:000> .exepath+ C:\MyImage

 


다음으로 lm 명령으로 확인하면 언로드된 모듈임을 알 수 있다.

이 정보에서 로드 당시의 로드 주소를 찾을 수 있다.


0:000> lm

start             end                 module name

...


Unloaded modules:

...

00007ffb`011a0000 00007ffb`0133d000  MyTest.dll


.reload 명령을 다음과 같이 사용하면 WinDbg가 모듈을 로드해서 보여준다.


.reload 모듈이름=로드주소,모듈크기


lm 결과에서 start 주소와 end 주소가 나왔기 때문에 end - start로 모듈크기를 구할 수 있다.

다음과 같이 실행한다.


0:000> .reload MyTest.dll=00007ffb`011a0000,19D000


그리고 나서 콜스택을 다시 보면 다음과 같이 나온다.


   1 Id: 15f0.45c Suspend: -1 Teb: 00007ff7`e7d6e000 Unfrozen

Child-SP RetAddr : Args to Child : Call Site

00000000`042cf890 00000000`00000000 : 00007ffb`083243a3 00000000`00000000 00000000`5c7bcabc 00000000`03949738 : MyTest!CMyClass::~CMyClass+0x33 


이렇게 되면 소스에서 어떤 부분이 문제인지 바로 찾아 볼 수 있다.

커널 덤프의 드라이버에 대해서도 동일하게 적용된다.


반응형
Posted by GreeMate