Microsoft Symbol Server / Алгоритм хэширования локального кэша
-
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