条件跟踪

本章节介绍 x64dbg 中的条件跟踪功能。

操作概述

当跟踪一步找到时,x64dbg 将做以下事情︰

  • 跟踪计数器 增加 1;
  • 设置系统变量 $tracecounter跟踪计数器 的值;
  • 如果中断条件 被设置,则计算该表达式(默认为0);
  • 执行插件回调(允许插件更改中断条件 );
  • 如果日志条件 被设置,则计算该表达式(默认为1);
  • 如果命令条件 被设置,则计算该表达式 (默认为中断条件);
  • 如果日志文本 被设置,并且日志条件 计算为1
  • 如果命令文本 被设置并且命令条件 计算为1
    • 设置系统变量 $tracecondition中断条件
    • 设置系统变量 $tracelogcondition日志条件
    • 命令文本 中执行命令;
    • 中断条件 将被设置为 $tracecondition 的值。因此,如果在脚本中修改此系统变量,你将能够控制调试对象是否被中断。
  • 如果中断条件 计算为1
    • 显示标准日志消息;
    • 中断调试对象并等待用户继续执行。

除了上述操作之外,x64dbg 还能够将跟踪的指令记录到跟踪视图并更新跟踪覆盖。每次调试器执行或暂停时都会发生这种情况,如果手动执行此操作也是如此。

日志记录

日志可以通过 x64dbg 被格式化,来记录程序的当前状态。请参阅有关如何格式化日志字符串的格式。如果您正在寻找记录所有跟踪指令的地址和反汇编,你可以使用{p:cip} {i:cip}。要将日志重定向到文件,请使用 TraceSetLogFile,或通过图形对话框。

跟踪覆盖

如果使用基于跟踪覆盖的跟踪选项之一,如 TraceIntoBeyondTraceRecord,则中断条件 的初始评估包括您指定的跟踪覆盖跟踪的类型。正常的中断条件 可用于在满足跟踪覆盖条件之前中断。如果要在您的条件中包含跟踪覆盖以进行完全控制,则可以使用表达式函数

备注

您可以通过"调试" 菜单中的 "跟踪直到条件"/"跟踪到条件" 命令启动条件跟踪。

你不应该使用可以更改调试对象运行状态(如run)内部断点命令的命令,因为用在这里,这些命令是不稳定的。你可以使用中断条件命令条件$tracecondition 来代替。

当您使用跟踪越过 时,即使条件为 true,调试对象也不会在已跳过的调用中暂停。此外,不会执行其他操作,例如日志记录和跟踪记录。这样可以加快跟踪速度,但是如果需要这些操作,则应使用 跟踪进入