条件跟踪
本章节介绍 x64dbg 中的条件跟踪功能。
操作概述
当跟踪一步找到时,x64dbg 将做以下事情︰
- 将跟踪计数器增加 1;
- 设置系统变量
$tracecounter
为跟踪计数器的值; - 如果中断条件被设置,则计算该表达式(默认为
0
); - 执行插件回调(允许插件更改中断条件);
- 如果日志条件被设置,则计算该表达式(默认为
1
); - 如果命令条件 被设置,则计算该表达式 (默认为中断条件);
- 如果切换条件被设置,则计算该表达式(默认为
0
); - 如果日志文本 被设置,并且日志条件计算为
1
:- 格式化并显示该日志文本 (参见字符串格式)。要将日志重定向到文件,请使用 TraceSetLogFile。
- 如果命令文本 被设置并且命令条件 计算为
1
:- 设置系统变量
$tracecondition
为中断条件; - 设置系统变量
$tracelogcondition
为日志条件; - 设置系统变量
$traceswitchcondition
为切换条件; - 在命令文本中执行命令;
- 中断条件 将被设置为
$tracecondition
的值。因此,如果在脚本中修改此系统变量,你将能够控制调试对象是否被中断。 - 切换条件 将被设置为
$traceswitchcondition
的值。因此,如果在脚本中修改此系统变量,你将能够控制步子类型是否被切换。
- 设置系统变量
- 如果中断条件 计算为
1
:- 显示标准日志消息;
- 中断调试对象并等待用户继续执行。
- 如果切换条件 计算为
1
:- 切换(反转)步进类型。如果在其中跟踪,它将切换到步出(和周围的其他方式)。例如,这可以允许你用条件
mod.party(dis.branchdest(cip)) == 1
调用时不进入系统模块跟踪,或不进入某些调用跟踪。
- 切换(反转)步进类型。如果在其中跟踪,它将切换到步出(和周围的其他方式)。例如,这可以允许你用条件
日志记录
日志可以通过 x64dbg 被格式化,来记录程序的当前状态。请参阅有关如何格式化日志字符串的格式。如果您正在寻找记录所有跟踪指令的地址和反汇编,你可以使用{p:cip} {i:cip}
。要将日志重定向到文件,请使用 TraceSetLogFile。
跟踪记录
如果使用其中一个基于跟踪记录的跟踪选项,则中断条件的初始评估包括您指定的跟踪记录跟踪类型。正常的中断条件 可用于在满足跟踪记录条件之前中断。如果要在您的条件中包含跟踪记录以进行完全控制,则可以使用表达式函数。
注释
您可以通过"调试" 菜单中的 "跟踪直到条件"/"跟踪到条件" 命令启动条件跟踪。
你不应该使用可以更改调试对象运行状态(如run
)内部断点命令的命令,因为用在这里,这些命令是不稳定的。你可以使用中断条件、命令条件 或 $tracecondition
来代替。