Ollydbg:如何为寄存器设置条件断点获得特殊值

逆向工程 ollydbg 断点 登记 奥利文
2021-06-27 09:19:44

我看了这个关于“一个寄存器值设定条件断点”的问题; 但它是关于在特殊地址上设置 bp 的!

我想设置一个 bp,例如ECX == 12345678,我可以在具有此条件的特定地址上执行此操作,但我想在整个模块上执行此操作,当模块中的任何位置ECX等于 时12345678,调试器将停止该过程。

我的问题有解决方案吗?或者是否有任何脚本可以做与我所说的相同的事情?

2个回答

(不完全是答案,但评论太长了)

这听起来像是一个简单的问题,但从技术上讲并非如此!我想解释一下为什么以及如何解决,如果有解决方案,它可能会非常非常缓慢。

调试器实际上并不知道程序中每个点的所有寄存器值。在调试中断之前,它不知道任何寄存器值。因此,如果触发了任何断点,它将能够读取这些值并对其进行操作(因此在特定地址上设置条件断点)。

这意味着如果您想在执行期间的任何时候知道寄存器是否具有特定值,您可能必须单步执行整个程序。即,执行一条指令,中断,读取值,执行一条指令,中断,读取值,...

这就是运行跟踪通常所做的,但由于速度原因,我从未使用过它们。您可能想查看 OllyDbg 的跟踪功能,看看它是否提供了您需要的功能,但要知道它可能会非常慢。

ctrl+t -> Set Trace Condition
checkmark condition is true 复选框并
在您的案例中输入条件ecx == 12345678
并使用ctrl+f11 或 ctrl+f12开始跟踪

快照显示条件ecx == eip 的跟踪记录

在此处输入图片说明