条件跟踪
本章节介绍 x64dbg 中的条件跟踪功能。
操作概述
当跟踪一步找到时,x64dbg 将做以下事情︰
- 将跟踪计数器 增加 1;
- 设置系统变量
$tracecounter
为跟踪计数器 的值; - 如果中断条件 被设置,则计算该表达式(默认为
0
); - 执行插件回调(允许插件更改中断条件 );
- 如果日志条件 被设置,则计算该表达式(默认为
1
); - 如果命令条件 被设置,则计算该表达式 (默认为中断条件);
- 如果日志文本 被设置,并且日志条件 计算为
1
:- 格式化并显示该日志文本 (参见字符串格式)。要将日志重定向到文件,请使用 TraceSetLogFile。
- 如果命令文本 被设置并且命令条件 计算为
1
:- 设置系统变量
$tracecondition
为中断条件; - 设置系统变量
$tracelogcondition
为日志条件; - 在命令文本 中执行命令;
- 中断条件 将被设置为
$tracecondition
的值。因此,如果在脚本中修改此系统变量,你将能够控制调试对象是否被中断。
- 设置系统变量
- 如果中断条件 计算为
1
:- 显示标准日志消息;
- 中断调试对象并等待用户继续执行。
除了上述操作之外,x64dbg 还能够将跟踪的指令记录到跟踪视图并更新跟踪覆盖。每次调试器执行或暂停时都会发生这种情况,如果手动执行此操作也是如此。
日志记录
日志可以通过 x64dbg 被格式化,来记录程序的当前状态。请参阅有关如何格式化日志字符串的格式。如果您正在寻找记录所有跟踪指令的地址和反汇编,你可以使用{p:cip} {i:cip}
。要将日志重定向到文件,请使用 TraceSetLogFile,或通过图形对话框。
跟踪覆盖
如果使用基于跟踪覆盖的跟踪选项之一,如 TraceIntoBeyondTraceRecord,则中断条件 的初始评估包括您指定的跟踪覆盖跟踪的类型。正常的中断条件 可用于在满足跟踪覆盖条件之前中断。如果要在您的条件中包含跟踪覆盖以进行完全控制,则可以使用表达式函数。
备注
您可以通过"调试" 菜单中的 "跟踪直到条件"/"跟踪到条件" 命令启动条件跟踪。
你不应该使用可以更改调试对象运行状态(如run
)内部断点命令的命令,因为用在这里,这些命令是不稳定的。你可以使用中断条件、命令条件 或 $tracecondition
来代替。
当您使用跟踪越过 时,即使条件为 true,调试对象也不会在已跳过的调用中暂停。此外,不会执行其他操作,例如日志记录和跟踪记录。这样可以加快跟踪速度,但是如果需要这些操作,则应使用 跟踪进入 。