Принуждение WinDbg для загрузки символов разгруженного модуля

Я отлаживаю модуль, для которого у меня есть только .exe и .pdb без личных символов.
Во время сеанса отладки мне нужно проверить внутреннюю структуру. Очевидно, что эта структура не отображается в PDB, поскольку она является частной, но, к счастью, у меня есть .h файл, где эта структура определена. Поэтому я могу создать некоторый фиктивный модуль, который использует эту структуру и получить файл PDB, содержащий эту структуру.

Теперь у меня есть разгруженный модуль с символами структуры, и я хотел бы загрузить его символы, чтобы выделить некоторую память для этой структуры. (без разгрузки оригинала .exe, я отлаживаю, конечно)
Проблема: кажется, что WinDbg позволяет только загружать символы для загруженных модулей...

Мой вопрос: Есть ли простой способ загрузить мои символы из выгруженного модуля?

Я пробовал .reload /i /f MyDll.dll, но я всегда получаю ...MyDll.dll - unmatched.
Установка sympath не помогла.

Любые идеи?

Ответы

Ответ 1

Вы можете заставить windbg загружать символы по определенному адресу, например.

0:000> .reload /f /i MyDll.dll=77777777
    c:\sym\MyDll.pdb - unmatched
0:000> lm
start             end                 module name
00000000`55555555 00000000`55555555   notepad    (no symbols)
00000000`77530000 00000000`7762a000   USER32     (deferred)
00000000`77777777 00000000`77777777   MyDll_77777777   (private pdb symbols)  c:\sym\MyDll.pdb

Непревзойденное предупреждение здесь состоит в том, что windbg не может сказать, что символы соответствуют правильной версии модуля, поскольку он не может найти отметки времени или контрольной суммы.

Ответ 2

Лучший способ - .reload /unl MyDll.dll

Выгруженный список модулей содержит отметку времени (для сопоставления изображений /pdb ) и базового адреса изображения. Использование /unl указывает WinDBG использовать эту информацию.