2014-01-23 59 views
2

我最近研究了用于调试器实现的Windows API函数。 现在我知道如何基本上调试程序并读取程序内存。我也发现处理某些“调试事件”的函数,例如断点(根据我的理解,它们是函数调用,它们植入要由编译器调试的程序中)。如何实现程序动画(在调试器中一步一步执行/单步执行)? (例如在VSC++中)

但是,我没有看到任何功能,可以使调试程序逐步通过一个程序(无论是逐个指令或逐行)。

我真的好奇这件事,任何帮助将非常感激!

预先感谢您!

Rafael

+0

1.在下一条逻辑线上创建断点。 2.恢复执行。 3.删除断点。 –

+0

这将需要调试器在每条指令后更改程序代码(内存中的图像)。我正在寻找的东西可能会告诉操作系统或处理器在每条指令后发出异常或中断。 –

回答

3

x86处理器具有所谓的硬件断点。基本上,你可以设置一个特定的寄存器。当程序计数器达到存储在寄存器中的值时,程序中断并控制给调试器。请参阅此简要说明以获得更好的理解。 http://en.wikipedia.org/wiki/X86_debug_register

+1

+1所有非平凡处理器都具有此功能。缓存/流水线/多核/等意味着仅软件断点不可行。 –

+0

@MartinJames - 恩,谢谢。之前我不知道,但由于你提到的原因,这很有道理。我甚至不想去想在这样的环境中试图插入INT3(或者相当于)所有地方的地狱。 o_O – enhzflep

+0

谢谢!这是我正在寻找的。 –

4

x86有TF,跟踪标志。在这种模式下,每条指令都会生成一个INT 1。这意味着您不必一直调整硬件断点寄存器。