Как symstore рассчитывает хэш-значение каталога - PullRequest
6 голосов
/ 01 ноября 2011

Я ищу алгоритм хеширования, который symstore использует для создания имени каталога. Я нашел эту ссылку Microsoft Symbol Server / Алгоритм хэширования локального кэша , которая описывает элементы данных, которые используются для генерации хэша, но не содержит никаких подробностей о том, как вычисляется значение хеш-функции. Мне интересно посмотреть, как symstore генерирует каталог хешей, и если у кого-нибудь есть пример кода, который он может показать, это было бы здорово!

Ответы [ 2 ]

8 голосов
/ 15 октября 2015

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, который печатает хеш-значения symstore для файлов PDB и PE:

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

4 голосов
/ 02 ноября 2011

Не уверен, что вы уже просмотрели это , но это патент США, описывающий процесс хранения символов.Он довольно плотный, как вы можете себе представить, но он довольно подробно описывает, как каталоги хранилищ символов расширяются и удаляются (в частности, в разделах 6, 7, 8).Надеюсь, это поможет или направит вас в правильном направлении.

...