symstore如何计算目录哈希值?

7

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


实际上,1419347描述了字段,但没有描述计算是如何执行的。这就是为什么发布了这个问题的原因。 - Scott Manning
2个回答

10

symstore.exe的hash目录名称计算如下:

对于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)文件,使用IMAGE_FILE_HEADER中的TimeDateStamp和IMAGE_OPTIONAL_HEADER中的SizeOfImage。以下是一个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


4

不确定您是否已经阅读过这篇文章,它是描述符号存储过程的美国专利。如您所想象的那样,它非常复杂,但确实详细描述了符号存储目录如何扩展和删除(特别是在第6、7、8节)。希望这有所帮助或指引您走向正确的方向。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接