Microsoft Symbol Server / Алгоритм хэширования локального кэша

StackOverflow https://stackoverflow.com/questions/1419347

  •  07-07-2019
  •  | 
  •  

Вопрос

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

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

  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-значный хэш;не могу понять, что делает эти файлы особенными, хотя у них нет соответствующего live-файла.

Я пробовал хешировать файлы с помощью всех известных мне алгоритмов хеширования (39 из них), и ни один из них никак не совпадает (прямой, обратный, альтернативный порядковый номер и т.д.)

Есть какие-нибудь идеи?

Обновить Я думаю, что наконец-то нашел это.От Формат хранения символов:

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

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

Это было полезно?

Решение

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

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


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

Другие советы

Попробуйте заглянуть на эту страницу: Функция обратного вызова сервера символов

Имя каталога EXE / DLL создается путем объединения шестнадцатеричной строки метки времени "файл изменен" и "Размер изображения" из IMAGE_OPTIONAL_HEADER - ГРАФИЧЕСКИЙ РЕДАКТОР

Вы можете найти ответ,

РАСШИРЕНИЕ ОБОЛОЧКИ РЕТРИВЕРА СИМВОЛОВ ; http://www.vitoplantamura.com/index.aspx?page=symretriever

DebugDir.cpp ; http://www.debuginfo.com/examples/src/DebugDir.cpp

Внутренние компоненты PDB-файла ; http://www.informit.com/articles/article.aspx?p=22685

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top