как windbg определяет, какие символы ОС загружать для файла дампа - PullRequest
0 голосов
/ 27 октября 2011

Когда я выполняю анализ файла дампа, я устанавливаю путь к символу, чтобы он указывал на сервер символов Microsoft.Как windbg знает, что файл дампа был создан под какой ОС и как он загружает правильные символы для этой ОС?

1 Ответ

2 голосов
/ 28 октября 2011

Чтобы сопоставить символы с бинарными, 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.

...