2017-11-29 22 views
1

나는 덤프 파일 조사를 위해 인터넷 어딘가에서 찾은 스크립트를 사용하여 windbg과 작업 중입니다.덤프의 module_name을 검색하는 Windbg 명령이 있습니까?

이 스크립트는 두 가지 명령을 실행합니다. 하나는 모든 기호를 확인하고 덤프에 있습니다 (적어도 생각한 것입니다), 모든 변수의 메모리 주소와 유형을 표시하는 명령입니다.

첫 번째 명령 :

두 번째 명령은 더 복잡하고 있습니다
0042da68   <application>!CMap<int,int,CStringArray *,CStringArray *> 
... 
74c06448   mfc110u!CStringArray 

다음과 같은 결과 :

006cabe0 <application>!CMap<int,int,CStringArray *,CStringArray *> 
... 
006f0280 mfc110u!CStringArray 

내가에 관심 x /2 *!*

결과는 같은 항목이 포함 CMapCStringArray 개체의 크기이므로 다음 명령을 실행합니다.

dt <application>!CMap<int,int,CStringArray *,CStringArray *> m_nCount 006cabe0 
dt <application>!CStringArray m_nSize 006f0280  

괜찮습니다. 필요한 정보를 얻을 수 있습니다.
는 또한이 잘 작동하는 것 같군 :

dt CStringArray m_nSize 006f0280  

그러나 이것은 하나의 실패 :

dt CMap<int,int,CStringArray *,CStringArray *> m_nCount 006cabe0 

이 내가 덤프의 응용 프로그램의 이름을 얻을 필요가 있음을 의미합니다 (것 같다 일부 서식 지정 중 사라짐).

!analyze -v 명령 (grep : MODULE_NAME)을 사용하여 검색 할 수 있지만 응용 프로그램의 이름을 얻는 것만으로도 부담 스럽습니다.

누구든지 windbg 명령을 알고 있는데 조사 중이라는 응용 프로그램을 알기 위해 실행해야합니까?

답변

2

| 찾을 수 디버깅중인 실행 :

0:000> | 
. 0 id: 13ac create name: C:\Program Files (x86)\Notepad++\notepad++.exe 

그러나, 실행 파일 이름이 대폭 모듈 이름 다를 수 : lm의 출력으로부터

0:000> lm m note* 
Browse full module list 
start end  module name 
01150000 013bf000 notepad__ (no symbols) 

우리 보시 모듈과 연관된 주소가 있음을 나타냅니다. 진입 점을 특정 모듈에 매핑 할 수 있다면 솔루션을 얻게 될 것입니다.

다행히, 우리에게 진입 점을 제공하고 lmlm a <address>와 주소를 받아들이는 $exentry있다, 그래서 우리는이 :

0:000> lm a $exentry 
Browse full module list 
start end  module name 
01150000 013bf000 notepad__ (no symbols) 

이 여전히 구문 분석을 많이 필요로하지만, 당신이 lm 1m 방법을 사용할 수 있습니다 뿐만 아니라 :

0:000> lm 1ma $exentry 
notepad__ 
+0

위대한 답변 일뿐만 아니라 그 답변에 도달하는 방법, 감사합니다! – Dominique

+1

커널 모드 덤프로 확장되지 않을 수 있음을주의하십시오. @ $ exentry는 예외 모듈을 가리 키지 않습니다. kd> dx Debugger.Utility.Control.ExecuteCommand ("! analyze -v"). 여기서 (a => a.Contains ("MODU")) [0x0] : MODULE_NAME : LiveKdD kd> lm 1m a @ $ exentry nt – blabb