symstore如何计算目录哈希值

时间:2011-11-01 10:46:00

标签: hash symbols pdb symstore

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

不确定您是否已经审核过this,但它是描述符号存储过程的美国专利。它非常密集,你可以想象但它确实详细描述了如何扩展和删除符号存储目录(特别是在第6,7,8节)。希望这有助于或指导您朝着正确的方向发展。