我正在寻找symstore使用的哈希算法来创建目录名称。 我找到了这个链接Microsoft Symbol Server / Local Cache Hash Algorithm,它描述了用于生成哈希的数据元素,但没有详细说明如何计算哈希值。 我很想看看symstore如何生成哈希目录,如果有人有示例代码可以展示,那就太棒了!
我正在寻找symstore使用的哈希算法来创建目录名称。 我找到了这个链接Microsoft Symbol Server / Local Cache Hash Algorithm,它描述了用于生成哈希的数据元素,但没有详细说明如何计算哈希值。 我很想看看symstore如何生成哈希目录,如果有人有示例代码可以展示,那就太棒了!
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 哈希值:
不确定您是否已经阅读过这篇文章,它是描述符号存储过程的美国专利。如您所想象的那样,它非常复杂,但确实详细描述了符号存储目录如何扩展和删除(特别是在第6、7、8节)。希望这有所帮助或指引您走向正确的方向。