4

お客様からのミニダンプがあります。ロードされた .NET dll のアセンブリ バージョンを確認したいと考えています。私はすでに何時間もインターネットを検索しましたが、使用可能な方法が見つかりません。私はwindbgを持っていて、必要なclr.dllとmscordacwksを持っているSOS拡張機能をロードしました。

使用lm -vすると、管理されていない dll のみが表示されます。私は非常に単純なものを見落としていると確信しています。

4

2 に答える 2

8

WinDbglm vには、マネージおよびアンマネージのすべての DLL が表示されます。そのレベルでは、アセンブリは単なる DLL であり、単なるモジュールです。

WinDbg 6.3.9600 ではlm v、モジュールに CLR ヘッダーがあるかどうかの情報も表示されます。

0:008> lmv m MyApp
start    end        module name
10310000 10574000   MyApp(deferred)             
    Image path: C:\...\MyApp.exe
    Image name: MyApp.exe
    Has CLR image header, track-debug-data flag not set
    Timestamp:        Wed May 21 16:34:02 2014 (537CB95A)
...
    ProductVersion:   1.8.0.44
    FileVersion:      1.8.0.44
...

ただし、FileVersion と ProductVersion は、DLL のネイティブ リソース部分にコンパイルされたアンマネージ情報のままです。

!SaveModule <start address> <filename>ファイルをディスクに保存し、dotPeekなどのリフレクション ツールを使用してファイルを開き、そこからアセンブリ情報を取得することをお勧めします。これにより、名前、バージョン、カルチャ、および公開キー トークンが得られます。

すべてのモジュールを保存するために、Naveenは次のようなスクリプトを作成しました。

!for_each_module .if ($spat ("${@#ImageName}","*.exe")) { !SaveModule ${@#Base} c:\temp\${@#ModuleName}.exe } .else { !SaveModule ${@#Base} c:\temp\${@#ModuleName}.dll }
于 2014-07-09T07:56:50.763 に答える