2011-05-12 112 views
0

我写了一个应用程序,使用dbgeng.dll加载一个系统范围的崩溃转储。我想使用一些像WinDbg命令(!vad) - 因为我需要其他dll,如exts.dll,ext.dll,kext.dll,kexts.dll。我拥有所有这些DLL并正确设置了我的_NT_DEBUGGER_EXTENSION_PATH。当我使用WinDbg GUI - .chain命令告诉我,所有这些dll都被加载,但是当我尝试从我的代码执行时 - 我看不到这些dll加载。另外,当我尝试使用Execute(.load ....)加载这些DLL时 - 它会引发错误 - “调用LoadLibrary('...')失败,Win32错误0n193”。我也试过!加载 - 他们两个都没有在我的代码中工作。但是一切都在GUI中完美运行。我无法弄清楚如何在我的C++代码中加载所有这些dll。dbgeng - 在C++中加载扩展dll?

请问有人能帮我一下吗? 我真的很感谢你的帮助!

-arb

回答

0

错误193如果收到错误193通常意味着你要加载的64位的dll在32位应用程序(或反之亦然)。

确保从windbg安装到的目录加载dbgeng.dll。您随后可以通过IDebugControl::Execute

+0

使用所有windbg命令感谢john。我试图强制从该文件夹的DLL加载,但仍然从我不想要的系统文件夹加载。如果我在我的代码中使用SetDllDirectory ..该dll仍然从系统目录加载...因为dll在设置dll目录之前被加载 - 你有任何解决方案? – arb 2011-05-14 16:26:45

+0

使用LoadLibrary动态加载它,并使用GetProcAddress获取DebugCreate。 – John 2011-05-14 20:03:41

+0

John,我正在尝试使用dbgeng.dll(这是64位)在Windows Server 2008 R2中调试32位win7崩溃转储。我遇到符号文件的问题。每当我做!vad - 它无法读取VAD树,因为它无法找到符号,尽管我已经将ntdll.pdb和ntkrpamp.pdb从VM复制到服务器的本地目录,我指向它。你知道可能是什么问题吗?我将衷心感谢您的帮助。谢谢 – arb 2011-05-18 13:46:56