Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 写入控制台时的断点_Windows_Debugging_Console - Fatal编程技术网

Windows 写入控制台时的断点

Windows 写入控制台时的断点,windows,debugging,console,Windows,Debugging,Console,我试图在调试器(x32dbg)中研究从windowsx86上的cpp程序输出到控制台的源代码。 我试图在kernel32和kernelbasedll中与console相关的每条指令上设置一个断点,但没有命中任何断点,同时大量输出被写入了控制台 有人知道我可以在调试器(x32dbg\windbg等)中的何处放置断点以捕获那些写入控制台事件吗?这只是一个解决方法: 难道你就不能编写一个小测试程序,除了打印到标准输出之外,什么都不做;然后在调试器中运行它 意思是:只需按照您的程序的执行步骤操作即可;看

我试图在调试器(
x32dbg
)中研究从windows
x86
上的cpp程序输出到控制台的源代码。 我试图在
kernel32
kernelbase
dll中与
console
相关的每条指令上设置一个断点,但没有命中任何断点,同时大量输出被写入了控制台


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

这只是一个解决方法:

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

意思是:只需按照您的程序的执行步骤操作即可;看看它会带你去哪里


换句话说:通过查看代码执行的操作来确定断点的位置?

这可能取决于windows版本,但在现代版本中-将bp设置为
kernelbase.ConsoleCallServerGeneric
(您需要使用pdb)或
ntdll.ZwDeviceIoControlFile
(导出)我在windows 10上工作。我在
windbg
上设置了断点,但它只在执行开始时在那里中断,当在实际控制台上写入时,它不会命中..奇怪-在win10上,任何控制台操作都必须调用此api从win7开始所有通过
\Device\ConDrv
上的
zwdeviceocontrolfile
与控制台的通信-因此这是100%被调用的解决方案使用单独的进程来管理窗口-
conhost.exe
(我在这里没有提到xp,csrss就是这样做的)与这个过程的所有通信都是通过
\Device\ConDrv
handle上的
zwdeviceocontrolfile
完成的-没有其他方式