symstore 如何计算目录哈希值

Posted

技术标签:

【中文标题】symstore 如何计算目录哈希值【英文标题】:How does symstore calculate the directory hash value 【发布时间】:2011-12-19 09:38:50 【问题描述】:

我正在寻找 symstore 用于创建目录名称的哈希算法。我发现这个链接Microsoft Symbol Server / Local Cache Hash Algorithm 描述了用于生成哈希的数据元素,但它没有详细说明如何计算哈希值。我有兴趣了解 symstore 如何生成哈希目录,如果有人有任何可以展示的示例代码,那就太好了!

【问题讨论】:

实际上 1419347 描述了字段,而不是如何执行计算。这就是发布此问题的原因 【参考方案1】:

不确定您是否已经查看过this,但它是描述符号存储过程的美国专利。正如您可以想象的那样,它非常密集,但它确实非常详细地描述了符号存储目录是如何扩展和删除的(特别是在第 6、7、8 节中)。希望这对您有所帮助或指出正确的方向。

【讨论】:

【参考方案2】:

symstore.exe 计算哈希目录名称如下:

对于 PDB 文件,使用 GUID + Age。这是一个python示例:

pdb = pdbparse.parse("some.pdb")
pdb.STREAM_PDB.load()
guid = pdb.STREAM_PDB.GUID
guid_str = "%.8X%.4X%.4X%s" % (guid.Data1, guid.Data2, guid.Data3,
                               guid.Data4.encode("hex").upper())

symstore_hash = "%s%s" % (guid_str, pdb.STREAM_PDB.Age)

对于 PE (exe/dll) 文件,使用 TimeDateStamp(来自 IMAGE_FILE_HEADER)和 SizeOfImage(来自 IMAGE_OPTIONAL_HEADER)。这是一个python示例:

pe = pefile.PE("some.exe")

symstore_hash = "%X%X" % (pe.FILE_HEADER.TimeDateStamp,
                          pe.OPTIONAL_HEADER.SizeOfImage)

这是一个示例 python 脚本,它为 PDB 和 PE 文件打印 symstore 哈希值:

https://gist.github.com/lennartblanco/9a70961a5aa66fe49df6

【讨论】:

以上是关于symstore 如何计算目录哈希值的主要内容,如果未能解决你的问题,请参考以下文章

C#上位机开发(十五)—— 计算字符串哈希值和文件哈希值

文件的哈希值不在指定的目录文件中 win10 怎么解决

MySQL索引

在 Windows 文件系统中,每个文件都有一个预先计算的哈希值吗?

文件的哈希值事啥意思

Go+ SHA1 哈希值教程(4.12)