Ollydbg watch/conditional 标志寄存器的断点表达式?

Ollydbg watch/conditional breakpoint expression for Flag registers?

所以我最近一直在逆向一个恶意软件,我想我可以使用一个条件断点,只要为特定的 jz 命令设置零标志就会中断。我阅读了网络上的文档和 olly 提供的帮助文件,但找不到任何有关如何执行此操作的示例。在在线文档中,它说 EFL 或标志寄存器可以在 watch/conditional 断点表达式中使用,但没有提及如何引用它们。我尝试了一个简单的表达式,例如 ZF == 1 和 ZF = 1(以防万一我弄错了),但没有用。我疯狂地搜索了 google 却一无所获,所以我希望有人找到了引用标志寄存器的方法。对于那些想知道为什么我不使用没有标志寄存器的表达式的人来说,我更好奇的是在我真正需要它的情况下如何引用标志寄存器。

提前致谢!

据我所知,您不能中断 EFLAGS 的特定标志名称,但您可以从 EFLAGS 获取值,因此您仍然有多种可能性:

注意:在 Ollydbg v2.01

上测试

1) 在 EFLAGS 的整个值上中断(请注意,ollydbg 条件语法的 EFLAGS 寄存器的值是 EFLFLAGS)。

EFL==0x246

2) 在特定标志处中断

  • 您需要了解 flag position,例如ZF为第6位(从0开始计数)。
  • 或者使用位位置作为掩码:

    ZF 示例(第 6 位设置为 1 是 0x40):(EFL & 0x40)==0x40

  • 将标志移动到它的位置,仅屏蔽它并测试它:

    ZF 示例(位 6):(EFL >> 6) & 1==1