我想在某个寄存器上放置一个断点,每当寄存器保存指定的值时,该断点就会触发。在下列范例中:
mov eax,10 mov ebx,12 inc eax dec eax
伪代码:
bp @eax=0x10
我想在1号线和4号线休息一下。注意:我不想只在某个地址上创建断点。
pgvzfuti1#
对于在某些内存地址中断,WinDbg从CPU获得帮助。转换为Microsoft states有关如何在特定处理器上处理这种情况的详细信息,请参阅处理器体系结构[sic!]手册,并查找“调试寄存器”或“调试控制寄存器”。因此,WinDbg在x86计算机上使用debug registers DR0 to DR3作为数据断点。我不太熟悉Intel CPU Architecture document的4800页,但我怀疑是否有寄存器断点的硬件支持。因此,如果没有硬件支持,并不意味着不能在软件中完成。但是,这基本上意味着你的程序将是单步执行的,并且在每条指令之后检查寄存器值。这将变得非常慢。虽然您可以使用p命令指定命令,但请注意,它将跳过call指令,这可能不是您想要的。因此,如果这不是一个XY-problem,您可能需要重新考虑。您认为解决方案是寄存器断点。但是,您认为寄存器断点是解决方案,需要解决什么问题呢?在我使用WinDbg进行调试的14年中,我从来不需要在特定寄存器值上中断。
p
call
1条答案
按热度按时间pgvzfuti1#
对于在某些内存地址中断,WinDbg从CPU获得帮助。
转换为Microsoft states
有关如何在特定处理器上处理这种情况的详细信息,请参阅处理器体系结构[sic!]手册,并查找“调试寄存器”或“调试控制寄存器”。
因此,WinDbg在x86计算机上使用debug registers DR0 to DR3作为数据断点。
我不太熟悉Intel CPU Architecture document的4800页,但我怀疑是否有寄存器断点的硬件支持。
因此,如果没有硬件支持,并不意味着不能在软件中完成。但是,这基本上意味着你的程序将是单步执行的,并且在每条指令之后检查寄存器值。这将变得非常慢。
虽然您可以使用
p
命令指定命令,但请注意,它将跳过call
指令,这可能不是您想要的。因此,如果这不是一个XY-problem,您可能需要重新考虑。您认为解决方案是寄存器断点。但是,您认为寄存器断点是解决方案,需要解决什么问题呢?在我使用WinDbg进行调试的14年中,我从来不需要在特定寄存器值上中断。