7

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

4

2 回答 2

10

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

于 2015-10-15T07:58:09.677 回答
4

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

于 2011-11-01T23:57:38.417 回答