问题标签 [dbgeng]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
466 浏览

c++ - IDebugControl::WaitForEvent 工作一次然后返回 E_HANDLE

我正在尝试制作一个使用Debugger Engine API的小工具,但我的成功非常有限。

我可以获得我的IDebugClientIDebugControl实例,然后我可以从那里附加到已经运行的用户进程中。然后我进入一个主循环,在其中调用WaitForEventOutputStackTraceSetExecutionStatus ( DEBUG_STATUS_GO) 并重复。本质上,这将是一个非常粗略的基于采样的分析器。

目前很好..

我的循环运行了一个完整的迭代,我可以看到正在显示堆栈跟踪,然后目标进程回到运行状态。

我遇到的问题是,在我的第二次迭代中,调用WaitForEvent返回E_HANDLE(“句柄无效”)。我在文档中看不到为什么应该返回这个错误。有谁知道为什么会发生这种情况?

0 投票
1 回答
594 浏览

debugging - IDebugSymbols::GetNameByOffset 和重载函数

我正在使用IDebugSymbols::GetNameByOffset并且我发现对于重载相同名称的不同函数,我得到了相同的符号名称。

例如,我正在查找符号的代码可能如下:

在运行时,当我从每个函数中获得指令的地址时,我想使用GetNameByOffset并以某种方式将两者区分开来。我已经尝试调用SetSymbolOptions 来切换此处SYMOPT_UNDNAME记录的和SYMOPT_NO_CPP标志,但这不起作用。

有谁知道如何在调试器引擎世界中区分这些符号?


编辑:请参阅我对已接受答案的评论,以对提议的解决方案进行小幅修改。

0 投票
1 回答
3966 浏览

debugging - 如何调试非法指令异常?

尝试使用 mdbglib 中的dbgeng时出现此异常:ASDumpAnalyzer.exe 中 0x037ba4f4 (dbgeng.dll) 的第一次机会异常:0xC000001D:非法指令。我想知道如何去调试这个?

它抛出了汇编指令 vmcpuid。当我跳过该指令时,代码按预期工作。

堆栈跟踪:

0 投票
3 回答
3167 浏览

windbg - WinDbg,显示加载模块的符号服务器路径(即使符号没有加载)?

WinDbg 有没有办法在不使用 DbgEng API 的情况下为所有加载的模块显示符号服务器路径(即PdbSig70 和 PdbAge )?

我知道

对已加载符号的模块执行此操作。我想知道未加载符号的这些路径,以便诊断问题。任何人都知道这是否可能无需使用 DbgEng API?

编辑:

我也意识到你可以使用

获取有关符号加载的错误消息。虽然这确实有有用的输出,但它与我想要的其他输出交错并且不像'lml'那样简单明了

0 投票
1 回答
444 浏览

.net - 我可以在自定义应用程序中使用 DbgEng 扩展 DLL 吗?

我很好奇我可以在没有 WinDbg 的情况下使用 DbgEng 扩展。例如,是否可以使用托管 .NET 应用程序中的 DbgEng 扩展?

问候, 雷姆西

0 投票
2 回答
864 浏览

c++ - 如何从 WinDbg 扩展中提取用户流?

我在转储中嵌入了一个自定义流(即将 UserStreamParam 参数传递给MiniDumpWriteDump函数)。现在,我正在尝试从 WinDbg 扩展中提取流。(请注意,我已经验证可以使用MiniDumpReadDumpStream函数检索流)。

我正在使用带有DEBUG_REQUEST_READ_USER_MINIDUMP_STREAM请求的IDebugAdvanced2::Request方法。我能够从标准流中检索数据。例如,以下代码段将正确检索 misc 信息流的内容。

但是,尝试检索我自己的流将导致错误(0x80070570,ERROR_FILE_CORRUPT)和 WinDbg 输出

请注意,相同的消息作为.dumpdebug输出的一部分出现。

问题是什么?如何检索我的用户流的内容?

0 投票
1 回答
653 浏览

dll - dbgeng - 在 C++ 中加载扩展 dll?

我编写了一个应用程序,其中我使用 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”。我也试过 !load - 它们都在我的代码中不起作用。但一切都在 GUI 中完美运行。我无法弄清楚如何在我的 c++ 代码中加载所有这些 dll。

有人可以帮我吗?我将衷心感谢您的帮助!

-套利

0 投票
1 回答
369 浏览

c++ - 无法让 windbg 识别我的扩展程序

不幸的是,由于某种我无法理解的原因,我无法让 windbg 识别我的扩展。

这一切都编译得很好,但是,每当我尝试从 windbg 加载扩展时,我都会得到:

我将我的 .dll 加载到 IDA Pro Free 中,然后查看导出,它是:“帮助”。几个小时以来,我一直试图弄清楚这一点。您能提供的任何帮助将不胜感激。非常感谢。

0 投票
1 回答
827 浏览

c++ - WinDbg 扩展步进

我正在尝试编写一个扩展函数,该函数将运行到下一次调用,然后打印出有关下一条指令的信息。

IDebugControl::Execute用来跑步tc。如文档中所述,此调用在跟踪实际发生之前返回。tc在我的扩展返回之前,睡眠或调用 DispatchCallbacks 不会看到跟踪。

如何在不从呼叫返回的情况下允许跟踪发生?

如果我添加自己的 DebugEventCallback,那么我可以收到有关触发的 DebuggeeState 和 EngineState 更改的通知,但无法从这些回调返回引擎。

0 投票
1 回答
265 浏览

c++ - DbgEng - 不通过回调获取命令输出

我使用 Microsoft 的 DbgEng 制作了一个独立的调试器应用程序。我想打开一个将命令发送到另一个 IDebugControl 实例的第二个线程,并且我想获取此 IDebugControl Execute 方法调用的特定输出(并通过 tcp 连接发送它)。

我有一个问题,因为来自主线程的 IDebugControl 也将命令发送到 Execute() 并且输出可能是混合的。我需要第二个线程,因为一旦它执行像“g”(go)这样的命令,它将调用 WaitForEvent(),并且在事件发生之前我将无法获得有关目标的任何进一步信息。

我需要一个解决方案。

第二个 IDebugControl 用于只发送数据请求的操作,例如反汇编行、内存转储……我想知道我是否可以制作第二个 IDebugClient 并将其附加到已经打开的调试进程中,然后问题就解决了,因为我可以对其进行其他回调。

有适合我的解决方案吗?