13

Microsoft SymbolLocalCacheディレクトリに使用されているハッシュアルゴリズムを理解しようとしています。

たとえば、ローカルキャッシュは次のようになります。

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

ファイルとそのデバッグデータベースの間には、ある種の対応関係があるようです。それ以外では、これらの(おそらく)16進文字列フォルダーの名前がどのように生成されているのか理解できません。

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

私が知っているあらゆる種類のハッシュアルゴリズム(そのうち39個)を使用してファイルをハッシュしようとしましたが、どのような方法でも一致しません(ストレート、リバース、オルタネートエンディアンなど)。

何か案は?

更新 私はついにそれを見つけたと思います。シンボルストレージフォーマットから:

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

Dangを編集 してください。残念ながら、ディレクトリ名はさまざまな側面から派生しているとだけ述べられていますが(私が推測するハッシュではありません)、正確な方法については述べていません。検索は続行されます…:-(

4

5 に答える 5

9

このページには、シンボル ファイルと実行可能ファイル/DLL の ID の計算に関する情報があります。

基本的に、実行可能ファイルと DLL の場合、Griff がリンクしているページに記載されているように、PE ヘッダーからタイムスタンプとファイルサイズを抽出します。ただし、PDB ファイルの場合は、Windows デバッグ ツールの DBH コマンドが必要です。PDB ファイルを DBH にロードし、INFO コマンドを使用してPdbSig/PdbSig70およびPdbAgeを取得するだけです。バム!それでおしまい。


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

于 2009-09-14T02:57:54.813 に答える
2

EXE/DLL ディレクトリ名は、IMAGE_OPTIONAL_HEADER の「ファイル変更」タイムスタンプと「SizeOfImage」の 16 進文字列を連結して作成されます

于 2017-09-16T14:52:45.737 に答える
2

このページを見てみてください: Symbol Server Callback Function

于 2009-09-30T18:21:07.033 に答える