2017-11-29 9 views
1

私はダンプファイルを調査するために、インターネット上のどこかで見つかったスクリプトを使用してwindbgと作業しています。ダンプのmodule_nameを取得するためのWindbgコマンドはありますか?

このスクリプトは、ダンプ内に存在するすべてのシンボル(少なくとも私が思う)を決定するためのコマンドと、すべての変数のメモリアドレスとタイプを表示するコマンドの2つのコマンドを起動します。

最初のコマンド:

2番目のコマンドは、より複雑であり、与え
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  

しかし、この1つが失敗している:

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

これは私がダンプファイルのアプリケーションの名前を取得する必要があることを意味し(あると思われますいくつかの書式設定中に消えた)。

!analyze -vコマンド(grepMODULE_NAMEで実行)を使用してこれを取得できますが、これはアプリケーションの名前を取得するだけで恐ろしい負担になります。

私は調べているダンプのアプリケーションを知るために実行する必要があるwindbgコマンドを知っていますか?

答えて

2

デバッグ中の実行ファイルが|で見つけることができます:

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

ただし、実行可能ファイル名を大幅にそのモジュール名と異なる場合が:

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

lmの出力から、我々が見ることができますモジュールに関連付けられたアドレスがあることを示します。エントリポイントを特定のモジュールにマッピングできるようになると、解決策が得られます。

幸いにも、そこに私たちのエントリポイントを与え、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

はただ、これは例外KDのないモジュールをNTにポイントするカーネルモードダンプの@ $のexentryとスケーリングない場合がありますのでご注意ください> DX Debugger.Utility.Control.ExecuteCommand(「!-vを分析する」)。ここで、(=> a.Contains( "MODU")) [0x0の]:MODULE_NAME:LiveKdD KD> LM 1メートルA @ $ exentry NT – blabb

関連する問題