【问题标题】:Breakpoint on write to console写入控制台时的断点
【发布时间】:2017-03-02 15:50:41
【问题描述】:

我尝试在调试器 (x32dbg) 中研究从 Windows x86 上的 cpp 程序输出到控制台的源。 我试图在kernel32kernelbase dll 中与console 有某种关联的每条指令上都设置一个断点,但没有命中任何断点,同时大量输出被写入控制台。

有谁知道我可以在调试器中的何处放置断点(x32dbg \ windbg 等)以捕获那些写入控制台事件?

【问题讨论】:

  • 这可以依赖于 Windows 版本,但在现代版本中 - 将 bp 设置为 kernelbase.ConsoleCallServerGeneric(您需要使用 pdb)或 ntdll.ZwDeviceIoControlFile(导出)
  • 我在 Windows 10 上工作。我在windbg 上设置了断点,但它只在执行开始时中断,而在实际控制台上写它没有命中..
  • 奇怪 - 正是在 win10 上,此 api必须为任何控制台操作调用
  • 从 win7 开始,所有与控制台的通信都通过 ZwDeviceIoControlFile\Device\ConDrv 上 - 所以这是 100% 调用
  • 控制台使用单独的进程来管理窗口 - conhost.exe (我在这里不说 xp,csrss 这样做)并且与此进程的所有通信都是通过 ZwDeviceIoControlFile 上的 \Device\ConDrv 句柄完成的 -别无他法

标签: windows debugging console


【解决方案1】:

只是一个解决方法的想法:

难道你不能只写一个小测试程序,除了打印到标准输出之外什么都不做吗?然后在调试器中运行?

含义:按照你的程序的执行步骤即可;看看它带你去哪里?

换句话说:通过查看您的代码在做什么来确定断点的好位置?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    相关资源
    最近更新 更多