强制WinDbg加载卸载模块的符号

Ami*_*nen 16 windbg

我正在调试一个模块,我只有.exe和没有私有符号的.pdb.
在调试会话期间,我需要检查内部结构.显然这个结构不会出现在PDB中,因为它是私有的 - 但幸运的是我有一个.h文件,其中定义了这个结构.因此,我可以构建一些使用此结构的虚拟模块,并获取包含此结构的PDB文件.

现在我有一个带有struct符号的卸载模块,我想加载它的符号,以便为该结构转换一些内存.(当然没有卸载原始的.exe我正在调试)
问题:似乎WinDbg只允许为加载的模块加载符号......

我的问题是:有没有一种简单的方法可以从卸载的模块加载我的符号?

我试过.reload /i /f MyDll.dll但我总是得到...MyDll.dll - unmatched.
设置同情并没有帮助.

有任何想法吗?

Cod*_*ard 19

更好的方法是 .reload /unl MyDll.dll

卸载的模块列表包含时间戳(用于图像/ pdb匹配)和图像基址.使用/unl告诉WinDBG使用该信息.


Joh*_*ohn 18

您可以强制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
Run Code Online (Sandbox Code Playgroud)

这里无与伦比的警告是因为windbg无法判断符号是否与模块的正确版本匹配,因为它找不到时间戳或校验和.