Чтобы сопоставить символы с бинарными, WinDbg смотрит на то, что называется каталогами отладки. Каталоги отладки - это разделы в PE-модулях (это формат файлов, используемый Windows для всех типов исполняемых файлов). Каталоги отладки просто содержат ссылки на типы отладочной информации. Если вы введете команду в окне cmd link /dump /headers <my_module_name>
, она выведет что-то вроде этого:
...
Debug Directories
Time Type Size RVA Pointer
-------- ------ -------- -------- --------
4CC78FB1 cv 22 00102588 101988 Format: RSDS, {30976E0B-FBF7-45EF-8608-99932F2B791F}, 2, ntdll.pdb
4CC78FB1 ( A) 4 00102584 101984 BB03197E
...
Это вывод для ntdll.dll. Вы можете видеть, что отладочная информация CV (для CodeView) содержится в ntdll.pdb, и GUID этого PDB должен совпадать с указанным в ссылке. Этот GUID генерируется случайным образом для каждого модуля во время сборки.
Команда !lmi
в WinDbg также выдаст эту информацию в другом формате.
Что WinDbg делает при загрузке символов с сервера символов, так это отправляет запрос на сервер символов, чтобы получить файл с именем ntdll.pdb с соответствующим идентификатором GUID.