ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

x64dbg 条件断点控制命令完全指南:条件、日志、命令与命中计数

x64dbg 条件断点控制命令完全指南:条件、日志、命令与命中计数 逆向工程调试器开发工具应用安全【免费下载链接】x64dbgAn open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.项目地址https://gitcode.com/gh_mirrors/x6/x64dbg点击查看免费下载x64dbg 是一款面向 Windows 的开源用户态调试器专为逆向工程与恶意软件分析而优化。本指南围绕 docs/commands/conditional-breakpoint-control/index.rst 这一命令参考索引展开系统讲解用于设置断点高级属性的 60 条控制命令从软件、硬件、内存、Librarian 到异常断点五大类型逐一覆盖名称、条件、日志、命令、快速恢复、一次性、静默与命中计数等属性。读完本文你将能熟练编写条件断点表达式、格式化命中日志、在断点触发时自动执行命令脚本并通过命中计数器实现第 N 次命中才中断等实战技巧。一、断点属性与控制命令总览在 x64dbg 中条件断点控制Conditional Breakpoint Control是独立于断点创建SetBPX、SetHardwareBreakpoint、SetMemoryBPX、SetExceptionBPX、LibrarianSetBreakpoint之外的一组命令集合其用途是为已存在的断点配置各种高级行为属性。每种断点类型都对应 12 条控制命令构成统一的属性矩阵属性软件断点硬件断点内存断点Librarian 断点异常断点设置名称SetBreakpointNameSetHardwareBreakpointNameSetMemoryBreakpointNameSetLibrarianBreakpointNameSetExceptionBreakpointName设置中断条件SetBreakpointConditionSetHardwareBreakpointConditionSetMemoryBreakpointConditionSetLibrarianBreakpointConditionSetExceptionBreakpointCondition设置日志文本SetBreakpointLogSetHardwareBreakpointLogSetMemoryBreakpointLogSetLibrarianBreakpointLogSetExceptionBreakpointLog设置日志条件SetBreakpointLogConditionSetHardwareBreakpointLogConditionSetMemoryBreakpointLogConditionSetLibrarianBreakpointLogConditionSetExceptionBreakpointLogCondition设置命令SetBreakpointCommandSetHardwareBreakpointCommandSetMemoryBreakpointCommandSetLibrarianBreakpointCommandSetExceptionBreakpointCommand设置命令条件SetBreakpointCommandConditionSetHardwareBreakpointCommandConditionSetMemoryBreakpointCommandConditionSetLibrarianBreakpointCommandConditionSetExceptionBreakpointCommandCondition快速恢复标志SetBreakpointFastResumeSetHardwareBreakpointFastResumeSetMemoryBreakpointFastResumeSetLibrarianBreakpointFastResumeSetExceptionBreakpointFastResume一次性标志SetBreakpointSingleshootSetHardwareBreakpointSingleshootSetMemoryBreakpointSingleshootSetLibrarianBreakpointSingleshootSetExceptionBreakpointSingleshoot静默标志SetBreakpointSilentSetHardwareBreakpointSilentSetMemoryBreakpointSilentSetLibrarianBreakpointSilentSetExceptionBreakpointSilent获取命中计数GetBreakpointHitCountGetHardwareBreakpointHitCountGetMemoryBreakpointHitCountGetLibrarianBreakpointHitCountGetExceptionBreakpointHitCount重置命中计数ResetBreakpointHitCountResetHardwareBreakpointHitCountResetMemoryBreakpointHitCountResetLibrarianBreakpointHitCountResetExceptionBreakpointHitCount所有命令遵循统一的参数约定arg1为断点标识地址或名称[arg2]为可选属性值除命中计数查询命令外其余命令均不设置任何结果变量。二、条件断点的执行流程理解所有属性的前提要正确使用上述属性必须先理解断点命中时 x64dbg 内部的判定顺序。这一流程在 docs/introduction/ConditionalBreakpoint.md 中有完整定义设置系统变量$breakpointexceptionaddress为触发断点的地址内存位置递增命中计数器设置系统变量$breakpointcounter为当前命中计数值若设置了中断条件break condition则求值该表达式默认值为1若设置了**快速恢复fast resume**且中断条件求值为0直接恢复被调试程序执行并跳过后续所有步骤同时跳过插件回调和 GUI 更新若设置了日志条件log condition则求值表达式默认1若设置了命令条件command condition则求值表达式默认1若中断条件求值为1或任何非0值打印标准日志消息若该断点被设为静默则抑制执行插件回调若设置了日志文本且日志条件求值为1格式化并打印日志文本若设置了命令文本且命令条件求值为1将$breakpointcondition设为中断条件、$breakpointlogcondition设为日志条件执行命令文本中的命令随后将中断条件更新为$breakpointcondition的最新值——这意味着你可以在断点命令脚本里修改该系统变量从而动态决定调试器是否中断若中断条件最终求值为1或非0中断被调试程序并等待用户恢复。两个重要的边界语义表达式无效即触发任何表达式解析失败时该条件将被视为满足——即无效的中断条件会导致断点总是中断、总是记日志、总是执行命令数字默认按十六进制解释表达式中所有数字默认按十六进制处理十进制需加.前缀如.123。三、五种断点类型的属性命令详解3.1 软件断点Software Breakpoint软件断点通过改写指令为INT3实现是 x64dbg 中最常用的断点类型。其属性命令以arg1传入断点地址。SetBreakpointName/bpname为软件断点设置名称该名称会显示在断点视图中并在断点命中时显示在日志中。arg1为已有软件断点的地址[arg2]为名称不指定则为空。SetBreakpointCondition/bpcond/bpcnd设置软件断点的中断条件。该条件在每次断点命中时被求值只有条件非0时调试器才会停止。SetBreakpointLog/bplog/bpl设置断点命中时的日志文本。未指定日志条件时无论中断条件如何都会记录日志否则仅在日志条件满足时记录。[arg2]为日志格式字符串语法参见 docs/introduction/Formatting.md。SetBreakpointLogCondition/bplogcondition设置日志条件。未指定时日志文本无条件记录不受中断条件影响。SetBreakpointCommand设置断点命中时执行的命令。未指定命令条件时命令在调试器将要中断时执行否则在命令条件满足时执行。[arg2]为命令文本不指定则为空。SetBreakpointCommandCondition设置命令条件。未指定时命令在调试器将要中断时执行。SetBreakpointFastResume设置快速恢复标志。若该标志置位且中断条件未判定为中断则不执行任何 GUI、插件、日志或其他动作仅递增命中计数器。[arg2]为0默认禁用或非0启用。SetBreakpointSingleshoot设置一次性标志。置位后断点在首次命中时即被移除。[arg2]为0默认禁用或非0启用。SetBreakpointSilent设置静默标志。置位后默认日志消息不再显示但用户自定义日志不受影响。[arg2]为0默认禁用或非0启用。GetBreakpointHitCount获取命中计数器值$result将被设为当前命中计数。ResetBreakpointHitCount重置命中计数器[arg2]可指定新的计数值默认0。3.2 硬件断点Hardware Breakpoint硬件断点借助 CPU 调试寄存器DR0–DR3实现不修改代码适用于对内存读写和特殊地址的监控。其命令集与软件断点完全同构仅命令名不同见上表arg1同样为断点地址SetHardwareBreakpointName/bphwname、SetHardwareBreakpointCondition/bphwcond、SetHardwareBreakpointLog/bphwlog、SetHardwareBreakpointLogCondition/bphwlogcondition、SetHardwareBreakpointCommand、SetHardwareBreakpointCommandCondition、SetHardwareBreakpointFastResume、SetHardwareBreakpointSingleshoot、SetHardwareBreakpointSilent、GetHardwareBreakpointHitCount、ResetHardwareBreakpointHitCount——语义与 3.1 节一一对应如 SetHardwareBreakpointCondition.md 规定条件在每次命中时求值仅当条件非0时停止。3.3 内存断点Memory Breakpoint内存断点通过内存页属性PAGE_GUARD监控指定内存区域常用于捕捉对特定缓冲区的访问。命令以bpm为系列别名前缀SetMemoryBreakpointName/bpmname、SetMemoryBreakpointCondition/bpmcond、SetMemoryBreakpointLog/bpmlog、SetMemoryBreakpointLogCondition/bpmlogcondition、SetMemoryBreakpointCommand、SetMemoryBreakpointCommandCondition、SetMemoryBreakpointFastResume、SetMemoryBreakpointSingleshoot、SetMemoryBreakpointSilent、GetMemoryBreakpointHitCount、ResetMemoryBreakpointHitCount。3.4 Librarian 断点DLL 加载断点Librarian 断点用于监控 DLL 加载事件。与前三类不同其arg1不是地址而是DLL 名称SetLibrarianBreakpointName/SetLibrarianBreakpointCondition/SetLibrarianBreakpointLog/SetLibrarianBreakpointLogCondition/SetLibrarianBreakpointCommand/SetLibrarianBreakpointCommandCondition/SetLibrarianBreakpointFastResume/SetLibrarianBreakpointSingleshoot/SetLibrarianBreakpointSilent/GetLibrarianBreakpointHitCount/ResetLibrarianBreakpointHitCount——arg1均为 DLL 名称条件在每次断点发生时求值。3.5 异常断点Exception Breakpoint异常断点针对调试事件如访问违例、断点异常、单步异常触发。其arg1是异常断点的名称、异常名称或异常代码例如SetExceptionBreakpointCondition STATUS_ACCESS_VIOLATION, EAX0这类用法并且求值有一个前提SetExceptionBreakpointCondition条件在每次异常发生且机会chance匹配时求值仅当条件非0时停止其余SetExceptionBreakpointName/Log/LogCondition/Command/CommandCondition/FastResume/Singleshoot/Silent/GetExceptionBreakpointHitCount/ResetExceptionBreakpointHitCount语义与 3.1 节一致arg1均为异常名称或代码。四、条件表达式与日志格式字符串实战4.1 条件表达式条件属性接受 x64dbg 的完整表达式语法详见 docs/introduction/Expressions.md 与 docs/introduction/Expression-functions.md。以下为 ConditionalBreakpoint.md 中的典型示例永不中断中断条件设为0——适合只想记录日志或执行命令、但不想暂停程序的场景仅当 EAX 与 ECX 都等于 1 时中断EAX1 ECX1仅当第一个参数为 1 时中断arg.get(0)1仅当 EAX 是有效地址时中断mem.valid(EAX)第三次命中才中断$breakpointcounter3或($breakpointcounter%3)0仅当由线程 1C0 执行时中断tid()1C0仅当 ECX 指向包含 foo 的 UTF-16 字符串时中断strstr(utf16(ECX), foo)。4.2 含逗号或字符串字面量的条件写法当表达式中包含逗号或字符串字面量时必须对命令参数加引号并转义。例如比较以反斜杠结尾的路径来自 SetBreakpointCondition.mdSetBreakpointCondition 401000, streq(utf8(rax), \C:\directory\\\)4.3 日志格式字符串*Log命令的[arg2]使用 x64dbg 内建字符串格式化器完整语法见 docs/introduction/Formatting.md。基本语法为{?:expression}?为可选的表达式输出类型类型含义示例输出d有符号十进制-3u无符号十进制57329171p零填充指针0000000410007683s字符串指针this is a stringx十六进制整数默认类型3C28Aa地址信息00401010 module.EntryPointi指令文本jmp 0x77ac3c87f/F单/双精度浮点指针或 XMM/YMM/ZMM 寄存器3.14复杂类型还包括{mem;sizeaddress}十六进制转储、{utf8[;length]address}、{utf16[;length]address}、{asciiaddress}、{disasmaddress}、{modnameaddress}、{labeladdress}、{commentaddress}、{winerrorcode}、{ntstatuscode}等。典型日志格式示例rax: {rax}→rax: 4C76password: {utf164*ecx0x402000}→password: s3cretfunction type: {mem;1[ebp]0xa}→function type: 01。注意在log命令中应给格式字符串加引号如log {mem;8rax}避免与命令分隔符;产生歧义。输出字面{或}时需转义为{{或}}。五、综合实战用属性矩阵实现智能断点将上述属性组合使用可以实现复杂的自动化调试逻辑场景 1循环中只在第 3 次迭代停下SetBPX 401000 SetBreakpointCondition 401000, $breakpointcounter3场景 2不中断仅记录每次调用参数并自动继续SetBreakpointCondition 401000, 0 SetBreakpointLog 401000, arg1{arg.get(0)} arg2{arg.get(1)} SetBreakpointFastResume 401000, 1这里快速恢复标志保证条件不满足时中断条件为0直接恢复执行、跳过 GUI 刷新从而把性能损耗降到最低——正如文档所述此时唯一仍会执行的动作就是递增命中计数器。场景 3首次命中即移除断点一次性SetBreakpointSingleshoot 401000, 1场景 4利用$breakpointcondition在命令中动态决定是否中断在断点命令文本中修改系统变量$breakpointcondition后其值会被回写为最终的中断条件参见上文执行流程第 10 步从而实现先记录、后决策的脚本化控制。注意不要在断点命令中使用run等会改变被调试程序运行状态的命令这类命令在此场景下不稳定应改用中断条件、命令条件或$breakpointcondition。六、GUI 操作对照条件断点也可以在图形界面中配置先按 F2 设置软件断点然后在指令上右键选择Edit breakpoint编辑断点在对话框中填入条件表达式及其他信息并确认即可效果与命令行命令等价见 docs/introduction/ConditionalBreakpoint.md 的 Notes 节。七、与条件追踪Conditional Tracing的分工条件断点只在断点被命中时才有机会暂停程序无法在断点未命中、但条件已满足时暂停。若你尚不清楚条件会在何处变为真应改用条件追踪ConditionalTracing配合 TraceIntoConditional / TraceOverConditional 等命令见 docs/commands/tracing/。八、相关资源条件断点机制详解docs/introduction/ConditionalBreakpoint.md命令索引本文依据docs/commands/conditional-breakpoint-control/index.rst断点创建命令docs/commands/breakpoint-control/表达式语法docs/introduction/Expressions.md表达式函数docs/introduction/Expression-functions.md日志格式字符串docs/introduction/Formatting.md赞分享逆向工程调试器开发工具应用安全【免费下载链接】x64dbgAn open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.项目地址https://gitcode.com/gh_mirrors/x6/x64dbg点击查看免费下载相关推荐x64dbg 断点日志条件命令 SetBreakpointLogCondition / bplogcondition 完全指南x64dbg 断点日志条件命令 SetBreakpointLogCondition / bplogcondition 完全指南 条件断点Conditional逆向工程调试器开发工具应用安全x64dbg 异常断点日志条件命令 SetExceptionBreakpointLogCondition 完全指南x64dbg 异常断点日志条件命令 SetExceptionBreakpointLogCondition 完全指南 导读 SetExceptionBreakpo逆向工程调试器开发工具应用安全x64dbg 中 DLL 加载/卸载断点的日志条件SetLibrarianBreakpointLogCondition 命令完全指南x64dbg 中 DLL 加载/卸载断点的日志条件SetLibrarianBreakpointLogCondition 命令完全指南 本篇指南聚焦 x64db逆向工程调试器开发工具应用安全上一篇Android热修复神器Tinker无需重启即可更新UI资源的终极指南下一篇SQLx异步编程终极指南利用async/await构建高性能数据库应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表