Microsoft Symbol Server / алгоритм кэширования локального кэша - PullRequest
9 голосов
/ 14 сентября 2009

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

Например, локальный кеш может выглядеть примерно так:

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

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

Ответы [ 4 ]

6 голосов
/ 14 сентября 2009

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

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


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

2 голосов
/ 30 сентября 2009

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

1 голос
/ 16 сентября 2017

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

0 голосов
/ 13 мая 2015

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

РАСШИРЕНИЕ ОБОЛОЧКИ СИМВОЛА ; 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

...