问题标签 [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.
c++ - IDebugControl::WaitForEvent 工作一次然后返回 E_HANDLE
我正在尝试制作一个使用Debugger Engine API的小工具,但我的成功非常有限。
我可以获得我的IDebugClient和IDebugControl实例,然后我可以从那里附加到已经运行的用户进程中。然后我进入一个主循环,在其中调用WaitForEvent、OutputStackTrace、SetExecutionStatus ( DEBUG_STATUS_GO
) 并重复。本质上,这将是一个非常粗略的基于采样的分析器。
目前很好..
我的循环运行了一个完整的迭代,我可以看到正在显示堆栈跟踪,然后目标进程回到运行状态。
我遇到的问题是,在我的第二次迭代中,调用WaitForEvent
返回E_HANDLE
(“句柄无效”)。我在文档中看不到为什么应该返回这个错误。有谁知道为什么会发生这种情况?
debugging - IDebugSymbols::GetNameByOffset 和重载函数
我正在使用IDebugSymbols::GetNameByOffset并且我发现对于重载相同名称的不同函数,我得到了相同的符号名称。
例如,我正在查找符号的代码可能如下:
在运行时,当我从每个函数中获得指令的地址时,我想使用GetNameByOffset
并以某种方式将两者区分开来。我已经尝试调用SetSymbolOptions 来切换此处SYMOPT_UNDNAME
记录的和SYMOPT_NO_CPP
标志,但这不起作用。
有谁知道如何在调试器引擎世界中区分这些符号?
编辑:请参阅我对已接受答案的评论,以对提议的解决方案进行小幅修改。
debugging - 如何调试非法指令异常?
尝试使用 mdbglib 中的dbgeng时出现此异常:ASDumpAnalyzer.exe 中 0x037ba4f4 (dbgeng.dll) 的第一次机会异常:0xC000001D:非法指令。我想知道如何去调试这个?
它抛出了汇编指令 vmcpuid。当我跳过该指令时,代码按预期工作。
堆栈跟踪:
windbg - WinDbg,显示加载模块的符号服务器路径(即使符号没有加载)?
WinDbg 有没有办法在不使用 DbgEng API 的情况下为所有加载的模块显示符号服务器路径(即PdbSig70 和 PdbAge )?
我知道
对已加载符号的模块执行此操作。我想知道未加载符号的这些路径,以便诊断问题。任何人都知道这是否可能无需使用 DbgEng API?
编辑:
我也意识到你可以使用
获取有关符号加载的错误消息。虽然这确实有有用的输出,但它与我想要的其他输出交错并且不像'lml'那样简单明了
.net - 我可以在自定义应用程序中使用 DbgEng 扩展 DLL 吗?
我很好奇我可以在没有 WinDbg 的情况下使用 DbgEng 扩展。例如,是否可以使用托管 .NET 应用程序中的 DbgEng 扩展?
问候, 雷姆西
c++ - 如何从 WinDbg 扩展中提取用户流?
我在转储中嵌入了一个自定义流(即将 UserStreamParam 参数传递给MiniDumpWriteDump函数)。现在,我正在尝试从 WinDbg 扩展中提取流。(请注意,我已经验证可以使用MiniDumpReadDumpStream函数检索流)。
我正在使用带有DEBUG_REQUEST_READ_USER_MINIDUMP_STREAM请求的IDebugAdvanced2::Request方法。我能够从标准流中检索数据。例如,以下代码段将正确检索 misc 信息流的内容。
但是,尝试检索我自己的流将导致错误(0x80070570,ERROR_FILE_CORRUPT)和 WinDbg 输出
请注意,相同的消息作为.dumpdebug
输出的一部分出现。
问题是什么?如何检索我的用户流的内容?
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。
有人可以帮我吗?我将衷心感谢您的帮助!
-套利
c++ - 无法让 windbg 识别我的扩展程序
不幸的是,由于某种我无法理解的原因,我无法让 windbg 识别我的扩展。
这一切都编译得很好,但是,每当我尝试从 windbg 加载扩展时,我都会得到:
我将我的 .dll 加载到 IDA Pro Free 中,然后查看导出,它是:“帮助”。几个小时以来,我一直试图弄清楚这一点。您能提供的任何帮助将不胜感激。非常感谢。
c++ - WinDbg 扩展步进
我正在尝试编写一个扩展函数,该函数将运行到下一次调用,然后打印出有关下一条指令的信息。
我IDebugControl::Execute
用来跑步tc
。如文档中所述,此调用在跟踪实际发生之前返回。tc
在我的扩展返回之前,睡眠或调用 DispatchCallbacks 不会看到跟踪。
如何在不从呼叫返回的情况下允许跟踪发生?
如果我添加自己的 DebugEventCallback,那么我可以收到有关触发的 DebuggeeState 和 EngineState 更改的通知,但无法从这些回调返回引擎。
c++ - DbgEng - 不通过回调获取命令输出
我使用 Microsoft 的 DbgEng 制作了一个独立的调试器应用程序。我想打开一个将命令发送到另一个 IDebugControl 实例的第二个线程,并且我想获取此 IDebugControl Execute 方法调用的特定输出(并通过 tcp 连接发送它)。
我有一个问题,因为来自主线程的 IDebugControl 也将命令发送到 Execute() 并且输出可能是混合的。我需要第二个线程,因为一旦它执行像“g”(go)这样的命令,它将调用 WaitForEvent(),并且在事件发生之前我将无法获得有关目标的任何进一步信息。
我需要一个解决方案。
第二个 IDebugControl 用于只发送数据请求的操作,例如反汇编行、内存转储……我想知道我是否可以制作第二个 IDebugClient 并将其附加到已经打开的调试进程中,然后问题就解决了,因为我可以对其进行其他回调。
有适合我的解决方案吗?