2009-09-14 4 views
8

Я пытаюсь выяснить, какой алгоритм хэширования используется для каталога локального кэша Symbol.Microsoft Symbol Server/Локальный алгоритм хэш-кэша

Например, локальный кэш может быть что-то вроде следующего

 
    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 

Там, кажется, какая-то соответствие между файлом и базой данных отладки. Кроме этого, я не могу понять, как генерируются имена этих (предположительно) шестнадцатеричных строковых папок.

Некоторые из них - 9 цифр, 13 цифр, а другие - 33 цифры. Похоже, что реальный живой файл (который по какой-то причине хранится в кеше символов) имеет 13-значный хэш, тогда как его (почти аналогичная) база данных отладки получает 9-значный хеш. Некоторые базы данных отладки получают 13-значный хеш; не могут понять, что делает эти специальные, хотя у них нет соответствующего живого файла.

Я пытался хэшированием файлов с любым типом алгоритма хеширования, что я знаю (39 из них), и ни один матча в любом случае (прямо вверх, обратный, дополнительный endian'd и т.д.)

Есть идеи?

Обновление Я думаю, что, наконец, нашел его. От Symbol Storage Format:

Symantec использует файловую систему как базу данных. Он создает большое дерево каталогов с именами каталогов, основанными на таких вещах, как отметки времени файла символов, подписи, возраст и другие данные.

Редактировать Dang, к сожалению, он упоминает только, что имя каталога является производным от различных аспектов (не совсем хэш-я думаю), но не говорит, как именно. Поиск продолжается ... :-(

ответ

4

This page имеется информация о вычислении идентификаторов для символа файлов, а также исполняемых/библиотек DLL.

В основном, для исполняемых файлов и библиотек DLL, вы извлекаете метку времени и размер файла из заголовка PE как указано на странице, связанной с Griff. Для файлов PDB вам понадобится команда DBH из средств отладки Windows. Просто загрузите файл PDB в DBH и используйте команду INFO для получения PdbSig/PdbSig70 и PdbAge. Bam! Это все.


По какой-то причине я создал соответствующие папки для файлов PDB, которые у меня были в моей папке SYSTEM32, и, наконец, переместил их в хранилище локальных символов.

+0

этой страницы больше не работает. У вас нет копии? – 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), в котором также упоминается поток [«Minidumps and source indexing»] (https://groups.google.com/forum/#!msg/microsoft.public.windbg/UYKSHJRtsFg/3inc6qfs-esJ) –

2

Попробуйте посмотреть на этой странице: Symbol Server Callback Function

+0

Ну, это точно помогает. Кажется, что эти идентификаторы - это то, из чего сделаны строки, однако мне еще нужно выяснить, как рассчитать эти идентификаторы. – Synetech

0

EXE/DLL имя каталога создается путем конкатенации шестнадцатеричной строки из «файла модифицированных» отметки времени и «SizeOfImage» от IMAGE_OPTIONAL_HEADER

 Смежные вопросы

  • Нет связанных вопросов^_^