2011-11-01 134 views
4

我正在查找symstore用來創建目錄名稱的哈希算法。我發現這個鏈接Microsoft Symbol Server/Local Cache Hash Algorithm描述了用於生成散列的數據元素,但沒有詳細說明如何計算散列值。我有興趣看看symstore如何生成哈希目錄,如果有人有任何示例代碼可以顯示,那就太好了!symstore如何計算目錄哈希值

+0

其實1419347描述的領域,而不是如何計算被執行。這就是爲什麼這個問題發佈 –

回答

2

不確定您是否已經查看過this,但它是描述符號存儲過程的美國專利。它可以想象的非常密集,但它確實詳細描述了符號存儲目錄是如何擴展和刪除的(具體在第6,7,8節中)。希望這會有所幫助,或者指出你的方向正確。

5

symstore.exe計算哈希目錄名稱如下:

對於PDB文件時,GUID +時代使用。下面是一個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