我正在调试一个模块,其中只有.exe和没有私有符号的.pdb。
在调试会话期间,我需要检查内部结构。显然,这个结构没有出现在PDB中,因为它是私有的,但幸运的是,我有一个.h文件,其中定义了这个结构。因此,我可以构建一些使用此结构的虚拟模块,并获得包含此结构的PDB文件。
现在,我有了一个带有结构符号的卸载模块,我希望加载它的符号,以便向该结构施加一些内存。(当然,在没有卸载原始.exe的情况下,我正在调试)
问题: WinDbg似乎只允许加载加载模块的符号.
我的问题是:是否有一种简单的方法可以从卸载模块加载符号?
我试过.reload /i /f MyDll.dll,但我总是能得到...MyDll.dll - unmatched。
设置符号路径没有帮助。
有什么想法吗?
发布于 2012-06-12 20:04:30
你可以强迫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无法判断符号是否与模块的正确版本相匹配,因为它不能找到时间戳或校验和。
发布于 2013-09-09 07:29:12
一个更好的方法是.reload /unl MyDll.dll
卸载模块列表包含时间戳(用于图像/pdb匹配)和图像基地址。使用/unl告诉WinDBG使用该信息。
https://stackoverflow.com/questions/10979418
复制相似问题