Microsoft符号服务器/本地缓存哈希算法

Syn*_*ech 11 hash symbol-server symstore

我试图弄清楚什么散列算法用于Microsoft符号本地缓存目录.

例如,本地缓存可以是如下所示

  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

文件与其调试数据库之间似乎存在某种对应关系.除此之外,我无法弄清楚如何生成这些(可能)十六进制字符串文件夹的名称.

其中一些是9位数,大约13位数,其他是33位数.它看起来像一个实际的实时文件(由于某种原因存储在符号缓存中)具有13位哈希,而其(几乎相似)调试数据库获得9位哈希.一些调试数据库获得13位哈希值; 虽然他们没有相应的实时文件,却无法弄清楚是什么让这些特殊.

我已经尝试使用我所知道的各种哈希算法(其中39个)对文件进行哈希处理,并且没有任何匹配(直接向上,反向,备用字节序等)

有任何想法吗?

更新 我想我终于找到了它.来自符号存储格式:

SymStore将文件系统本身用作数据库.它创建了一个大型目录树,其目录名称基于符号文件时间戳,签名,年龄和其他数据.

编辑 Dang,不幸的是它只提到目录名是从各个方面派生的(我猜不是很好的哈希),但并没有提到具体如何.搜索继续...... :-(

Syn*_*ech 7

此页面包含有关计算符号文件以及可执行文件/ DLL的ID的信息.

基本上,对于可执行文件和DLL,您可以从Griff链接到的页面中列出的PE头中提取时间戳和文件大小.但是,对于PDB文件,您将需要Windows调试工具中的DBH命令.只需将PDB文件加载到DBH中,然后使用INFO命令获取PdbSig/PdbSig70PdbAge.巴姆!而已.


我刚刚为SYSTEM32文件夹中的PDB文件创建了相应的文件夹,出于某种原因,最后将它们移动到本地符号存储区.

  • Wayback Machine甚至不再拥有该页面了.但从URL来看,我猜它是这个帖子的副本:["Resyncing PDB and EXE"](https://groups.google.com/forum/#!searchin/microsoft.public.vc.debugger/ resyncing/microsoft.public.vc.debugger/xLVvCBIU6fI/0ErZ6YlXJDEJ),它也提到了线程["Minidumps and source indexing"](https://groups.google.com/forum/#!msg/microsoft.public.windbg/UYKSHJRtsFg/3inc6qfs-ESJ) (2认同)