2009-09-14 9 views
8

Microsoft Symbol Local Cacheディレクトリに使用されているハッシュアルゴリズムを把握しようとしています。Microsoft Symbol Server/Local Cache Hash Algorithm

例えば、ローカルキャッシュには、以下の

 
    L:\Symbols 
     \browseui.dll 
     \44FBC679fe000 
      browsue.dll 
     \browseui.pdb 
     \44F402F62 
      browseui.pdb 
     \explorer.exe 
     \3EBF1F14f7000 
      explorer.exe 
     \explorer.pdb 
     \3EBF1F141 
      explorer.pdb 
     \msvcr71.pdb 
     \60D915C6AB6A4F3586E9096E2F8856482 
      msvcr71.pdb 

ようなものになる可能ファイルとそのデバッグデータベースとの間の対応のいくつかの並べ替えがあるようです。それ以外に、これらの(おそらく)16進文字列フォルダの名前がどのように生成されているのかわかりません。

一部は9桁、一部は13桁、その他は33桁です。実際のライブファイル(何らかの理由でシンボルキャッシュに格納されている)のように見えますが、13桁のハッシュを持っています(ほぼ同じ)デバッグデータベースは9桁のハッシュを取得します。いくつかのデバッグデータベースは13桁のハッシュを取得します。対応するライブファイルを持っていないものの、これらのファイルを特別なものにするために何が特別なのか理解できません。

私はどのような方法で(それらの39)と、どれもマッチを知っているハッシュアルゴリズムのすべての種類のファイルをハッシュしようとした

(、まっすぐには、代替endian'dなどを逆転しました)何か案は?

更新 私は最終的にそれを見つけたと思います。 Symbol Storage Format

SymStoreは、ファイルシステム自体をデータベースとして使用します。これは、シンボルファイルのタイムスタンプ、署名、年齢、およびその他のデータに基づいたディレクトリ名を持つ大きなディレクトリツリーを作成します。

編集 ダン、残念ながらそれだけで、ディレクトリ名はさまざまな側面(私は推測していない、非常にハッシュ)に由来しているが、正確にどのように言っていないことに言及しています。検索は

答えて

4

This pageがシンボルのIDを計算する上での情報がファイルなどの実行可能ファイル/ DLLがあり:-(続く...。

基本的には、実行ファイルやDLLのために、あなたはPEヘッダからタイムスタンプとファイルサイズを抽出しますただし、PDBファイルの場合は、WindowsデバッグツールのDBHコマンドが必要です.DBHファイルをDBHにロードし、INFOコマンドを使用してを取得します。PdbSig/PdbSig70およびPdbAge。Bam!それです。


何らかの理由でSYSTEM32フォルダにあるPDBファイル用の適切なフォルダを作成し、最終的にはそれらをローカルシンボルストアに移動しました。

+0

から「ファイル変更」タイムスタンプと「SizeOfImage」の16進文字列を連結して作成されます。コピーはどこにもありませんか? – nothrow

+2

Wayback Machineでさえもはやそのページがありません。しかし、URLから判断すると、私はそれがこのスレッドのコピーであると推測しています:["Resyncing PDB and EXE"](https://groups.google.com/forum/#!searchin/microsoft.public.vc.debugger/ resyncing/microsoft.public.vc.debugger/xLVvCBIU6fI/0ErZ6YlXJDEJ)、スレッド[「ミニダンプとソースインデックス作成」](https://groups.google.com/forum/#!msg/microsoft.public.windbg/UYKSHJRtsFg/3inc6qfs-esJ) –

2

このページを見て試してみてください:あなたは答えを見つけることができますSymbol Server Callback Function

+0

これは確かに役立ちます。これらのIDは文字列のものと思われますが、これらのIDを計算する方法はまだ分かっています。 – Synetech