2009-09-14 12 views
8

Sto cercando di capire quale algoritmo di hash viene utilizzato per la directory Cache locale di Microsoft Symbol.Algoritmo hash di Microsoft Symbol Server/Local Cache

Ad esempio, la cache locale può essere qualcosa di simile al seguente

 
    L:\Symbols 
     \browseui.dll 
     \44FBC679fe000 
      browsue.dll 
     \browseui.pdb 
     \44F402F62 
      browseui.pdb 
     \explorer.exe 
     \3EBF1F14f7000 
      explorer.exe 
     \explorer.pdb 
     \3EBF1F141 
      explorer.pdb 
     \msvcr71.pdb 
     \60D915C6AB6A4F3586E9096E2F8856482 
      msvcr71.pdb 

Sembra che ci sia una sorta di corrispondenza tra un file e il suo database di debug. Oltre a questo, non riesco a capire come vengano generati i nomi di queste (presumibilmente) cartelle di stringhe esadecimali.

Alcuni di questi sono 9 cifre, 13 cifre e altri 33 cifre. Sembra un vero live-file (che per qualche ragione è memorizzato nella cache dei simboli) ha un hash di 13 cifre mentre il suo (quasi simile) database di debug ottiene un hash a 9 cifre. Alcuni database di debug ricevono un hash a 13 cifre; non riesco a capire cosa rende questi speciali, anche se non hanno un live-file corrispondente.

Ho provato hashing dei file di ogni tipo di algoritmo di hash che io sappia (39 di loro) e nessuno partita in qualsiasi modo (verso l'alto, invertito, endian'd alternativo, ecc)

Qualche idea?

Aggiornamento Penso di averlo finalmente trovato. Da Symbol Storage Format:

SymStore utilizza il file system stesso come database. Crea un grande albero di directory, con nomi di directory basati su elementi quali timestamp, firme, età e altri dati del file di simboli.

Modifica Dang, purtroppo si parla solo che il nome della directory è derivato da vari aspetti (non proprio un hash immagino), ma non dice esattamente come. La ricerca continua ... :-(

risposta

4

This page ha informazioni sul calcolo gli ID per il simbolo file così come eseguibili/DLL.

In sostanza, per gli eseguibili e le DLL, si estrae il timestamp e la dimensione del file dall'intestazione PE Per i file PDB, tuttavia, è necessario il comando DBH dagli strumenti di debug di Windows. È sufficiente caricare il file PDB in DBH e utilizzare il comando INFO per ottenere il PdbSig/PdbSig70 e PdbAge. Bam! Ecco fatto.


Ho appena creato le cartelle appropriate per i file PDB che avevo nella mia cartella SYSTEM32 per qualche motivo, e infine li ho spostati nell'archivio dei simboli locale.

+0

Quella pagina non funziona più. Non hai una copia da nessuna parte? – nothrow

+2

Neanche la Wayback Machine ha quella pagina. Ma a giudicare dall'URL, suppongo che sia una copia di questo thread: ["Resyncing PDB and EXE"] (https://groups.google.com/forum/#!searchin/microsoft.public.vc.debugger/ risincronizzazione/microsoft.public.vc.debugger/xLVvCBIU6fI/0ErZ6YlXJDEJ), che cita anche il filo [ "minidumps e indicizzazione source"] (https://groups.google.com/forum/#!msg/microsoft.public.windbg/UYKSHJRtsFg/3inc6qfs-esJ) –

2

Prova a guardare questa pagina: Symbol Server Callback Function

+0

Beh, questo sicuramente aiuta. Questi ID sembrano essere il risultato delle stringhe, tuttavia devo ancora calcolare come calcolare quegli ID. – Synetech

0

EXE/DLL nome della directory viene creata concatenando stringa esadecimale del "file modificato" time-stamp e "SizeOfImage" dal IMAGE_OPTIONAL_HEADER

Problemi correlati