assembly 寄存器值上的Windbg断点

atmip9wb  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(181)

我想在某个寄存器上放置一个断点,每当寄存器保存指定的值时,该断点就会触发。
在下列范例中:

mov eax,10
mov ebx,12
inc eax
dec eax

伪代码:

bp @eax=0x10

我想在1号线和4号线休息一下。
注意:我不想只在某个地址上创建断点。

pgvzfuti

pgvzfuti1#

对于在某些内存地址中断,WinDbg从CPU获得帮助。
转换为Microsoft states
有关如何在特定处理器上处理这种情况的详细信息,请参阅处理器体系结构[sic!]手册,并查找“调试寄存器”或“调试控制寄存器”。
因此,WinDbg在x86计算机上使用debug registers DR0 to DR3作为数据断点。
我不太熟悉Intel CPU Architecture document的4800页,但我怀疑是否有寄存器断点的硬件支持。
因此,如果没有硬件支持,并不意味着不能在软件中完成。但是,这基本上意味着你的程序将是单步执行的,并且在每条指令之后检查寄存器值。这将变得非常慢。
虽然您可以使用p命令指定命令,但请注意,它将跳过call指令,这可能不是您想要的。
因此,如果这不是一个XY-problem,您可能需要重新考虑。您认为解决方案是寄存器断点。但是,您认为寄存器断点是解决方案,需要解决什么问题呢?在我使用WinDbg进行调试的14年中,我从来不需要在特定寄存器值上中断。

相关问题