2009-09-14 3 views
8

Microsoft 기호 로컬 캐시 디렉터리에 대해 사용되는 해시 알고리즘을 파악하려고합니다.Microsoft 기호 서버/로컬 캐시 해시 알고리즘

예를 들어, 로컬 캐시는 파일과 디버그 데이터베이스 간의 일치의 어떤 종류가있는 것 같습니다 다음

 
    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 

같은 것을 할 수 있습니다. 그 외에도, 나는 (아마도) 16 진수 문자열 폴더의 이름이 어떻게 생성되는지 알 수 없다.

일부는 9 자리이고, 일부는 13 자리이며 나머지는 33 자리입니다. 실제 메모리 파일 (어떤 이유로 심볼 캐시에 저장 됨)은 13 자리의 해시를 가지며 (거의 비슷한) 디버그 데이터베이스는 9 자리의 해시를 얻습니다. 일부 디버그 데이터베이스는 13 자리 해시를가집니다. 해당 라이브 파일이 없더라도 이러한 파일을 특수하게 만드는 것이 무엇인지 파악할 수 없습니다.

내가 어떤 방식으로 (그 중 39)와 전혀 일치 알고 해시 알고리즘의 모든 종류의 파일을 해싱 시도했습니다

(똑바로은 대체 endian'd 등 반전) 어떤 아이디어?

업데이트 드디어 찾아 냈습니다. Symbol Storage Format에서 :

SymStore는 데이터베이스의 파일 시스템 자체를 사용합니다. 심볼 파일 타임 스탬프, 서명, 나이 및 기타 데이터를 기반으로하는 디렉토리 이름으로 디렉토리의 큰 트리를 만듭니다.

편집 젠장, 불행하게도 그것은 단지 디렉토리 이름을 다양한 측면 (제 생각 엔 꽤 해시)에서 유래하지만, 정확히 어떻게 말을하지 않는 것을 언급하고있다. 검색은 :-(... 계속

답변

4

This page 기호의 ID를 계산에 대한 정보는 실행 파일/DLL을뿐만 아니라 파일을 가지고있다.

는 기본적으로, 실행 파일과 DLL을 위해, 당신은 PE 헤더에서 타임 스탬프 및 파일 크기를 추출 그러나 PDB 파일의 경우 DBB로 PDB 파일을로드하고 INFO 명령을 사용하여 을 얻으십시오. PdbSig/PdbSig70PdbAge. Bam! 그게 전부 야.


몇 가지 이유로 필자의 SYSTEM32 폴더에있는 PDB 파일에 적합한 폴더를 만들고 마침내 로컬 기호 저장소로 옮겼습니다.

+0

에서 해당 페이지를 "파일 수정"타임 스탬프와 "SizeOfImage"의 16 진수 문자열을 연결하여 생성됩니다. 아무 데나 복사본이 없습니까? – nothrow

+2

Wayback Machine조차도 그 페이지를 가지고 있지 않습니다. 하지만 URL을 보면이 스레드의 사본 인 것 같습니다. [ "Resyncing PDB and EXE"] (https://groups.google.com/forum/#!searchin/microsoft.public.vc.debugger/ resyncing/microsoft.public.vc.debugger/xLVvCBIU6fI/0ErZ6YlXJDEJ) 또한 스레드 [ "미니 덤프 및 소스 인덱싱"] (https://groups.google.com/forum/#!msg/microsoft.public.windbg/UYKSHJRtsFg/3inc6qfs-esJ) –

2

이 페이지를보고하십시오 : 당신은 답을 찾을 수 있습니다 Symbol Server Callback Function

+0

그게 분명 도움이됩니다. 그 ID는 문자열이 만들어진 것처럼 보이지만 ID를 계산하는 방법을 알아 내야합니다. – Synetech