新闻详情

新闻详情

首页 / 资讯中心 / 详情

x64dbg 运行追踪停止命令全解析:StopTraceRecording / StopRunTrace / tc 的原理、用法与实战

发布时间:2026/9/19 22:13:57来源:尧图网络
x64dbg 运行追踪停止命令全解析:StopTraceRecording / StopRunTrace / tc 的原理、用法与实战
x64dbg 运行追踪停止命令全解析StopTraceRecording / StopRunTrace / tc 的原理、用法与实战【免费下载链接】x64dbgAn open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.项目地址: https://gitcode.com/gh_mirrors/x6/x64dbg导读StopTraceRecording别名StopRunTrace、tc是 x64dbg 中用于停止运行追踪Run Trace并关闭追踪记录文件的核心命令是完整追踪工作流的收尾环节。本文以该命令为骨架结合仓库源码讲清它在命令注册、底层实现、GUI 联动与调试生命周期中的完整调用链并给出与StartTraceRecording、TraceIntoConditional等命令配合的可复现实战流程帮助你掌握开启追踪 → 录制指令 → 停止落盘 → 回放分析的全套技能。一、命令速览无参、无结果变量依据 StopRunTrace.md 官方文档该命令的使用契约非常简单项目说明命令名StopTraceRecording别名StopRunTrace、tc参数无This command has no arguments.结果变量不设置任何结果变量它做的事情在文档中只有一句话停止追踪记录并关闭记录文件Stops trace recording and closes the file。虽然文档极其精简但它在命令系统中以三个名字注册兼容了 OllyScript 风格的tctrace close脚本指令因此在 x64dbg 的命令行、脚本script以及 GUI 菜单中都可以直接使用。命令注册证据位于 x64dbg.cpp与它的开启命令成对出现dbgcmdnew(StartTraceRecording,StartRunTrace,opentrace, cbDebugStartTraceRecording, true); //start run trace (Ollyscript command opentrace opens run trace window) dbgcmdnew(StopTraceRecording,StopRunTrace,tc, cbDebugStopTraceRecording, true); //stop run trace (and Ollyscript command)tc别名同时被登记在脚本命令表中见 script_commands.txt意味着在 x64dbg 的脚本语言中同样可以调用tc停止追踪。二、命令入口从控制台命令到 TraceRecordManager停止命令的处理器位于 cmd-tracing.cpp实现极其精简——它不接受任何参数直接委托给全局的TraceRecord管理器bool cbDebugStopTraceRecording(int argc, char* argv[]) { return TraceRecord.enableTraceRecording(false, nullptr); }TraceRecord是TraceRecordManager类的全局实例声明见 TraceRecord.hx64dbg 中所有运行追踪的开启、停止、指令记录、命中统计都收敛在这个类上。与之对称的开启命令cbDebugStartTraceRecordingcmd-tracing.cpp则要求至少一个参数追踪文件名二者通过同一个enableTraceRecording(bool enabled, const char* fileName)入口以enabled参数区分启停——这是理解本命令底层行为的关键。三、底层实现enableTraceRecording(false)究竟做了什么停止逻辑位于 TraceRecord.cpp当enabled false时执行如下序列else { if(rtEnabled) { CloseHandle(rtFile); // 1. 关闭追踪文件句柄落盘 rtPrevInstAvailable false; // 2. 清除上一条指令缓存状态 rtEnabled false; // 3. 置位停止标志 dputs(QT_TRANSLATE_NOOP(DBG, Trace recording stopped.)); PLUG_CB_STOPTRACE stopTraceInfo{}; // 4. 通知插件追踪已停止 stopTraceInfo.reserved nullptr; plugincbcall(CB_STOPTRACE, stopTraceInfo); } return true; }可提炼出四个关键事实幂等性只有rtEnabled true即确实处于录制状态时才执行清理重复调用不会出错也不会重复关闭句柄。文件落盘追踪期间通过CreateFileW(..., FILE_APPEND_DATA, ..., OPEN_ALWAYS, ...)以追加模式持有的句柄TraceRecord.cpp在此处被CloseHandle关闭保证缓冲数据完整写入磁盘。状态复位rtPrevInstAvailable被清空意味着下一次重新开启录制时不会沿用旧的上一条指令状态TraceRecord.h 中该字段用于跨指令差分记录寄存器与内存变化。插件通知通过plugincbcall(CB_STOPTRACE, ...)广播停止事件任何注册了该回调的插件都能感知追踪结束并做后续处理如自动分析、导出等。对应的开启阶段会广播CB_STARTTRACETraceRecord.cpp。同时开启录制时还有一处值得注意的细节如果当前已在录制enableTraceRecording(true, ...)会先自动调用一次enableTraceRecording(false, NULL)实现重开TraceRecord.cpp且只有在DbgIsDebugging()为真调试会话进行中时才开始录制TraceRecord.cpp而停止命令没有此限制即使调试已结束也可安全执行。四、追踪文件的收尾格式停止前写入了什么理解停止命令关闭文件的意义需要回看开启阶段写入的文件结构。enableTraceRecording(true, ...)在创建文件后若文件为空会先写入一个文件头TraceRecord.cpp8 字节头TRAC魔数4 字节 紧随其后的 JSON 头长度4 字节JSON 头内容ver版本当前为 1、archx86/x64由ArchValue宏按架构生成、hashAlgorithm当前为murmurhash、hash可执行文件哈希来自DbGetHash、compression当前为空串、path被调试模块路径由ModPathFromAddr获得。若文件已存在且非空例如追加录制则定位到文件末尾继续追加TraceRecord.cpp。也就是说停止命令执行的CloseHandle是保证上述文件头与后续指令记录完整落盘的最后一步如果文件头写入失败如只读介质或写入不完整如磁盘满开启阶段会直接失败并打印Trace recording failed to start because the file header cannot be written.TraceRecord.cpp。录制过程中每执行一条指令都会通过TraceExecuteRecord记录指令字节、寄存器上下文与内存访问差分数据数据结构见 TraceRecord.h 中TraceRecordBitExec、TraceRecordByteWithExecTypeAndCounter、TraceRecordWordWithExecTypeAndCounter三种记录类型并在开启时通过GuiOpenTraceFile(fileName)将文件同步打开到 Trace 视图TraceRecord.cpp。停止后该文件即可被 Trace 视图随时重新打开回放。五、完整工作流从开启、录制到停止落盘5.1 第一步开启追踪使用 StartRunTrace.md 中描述的StartTraceRecording/StartRunTrace/opentrace命令StartTraceRecording C:\traces\sample.trace32注意默认扩展名trace32或trace64不会自动追加需在文件名中显式写出。文件也会立即在 Trace 视图中打开。开启录制本身不会驱动程序执行需要配合追踪类命令才能真正录制指令TraceIntoConditional.mdTraceIntoConditional/ticnd单步步入直到条件满足或达到最大步数TraceIntoIntoTraceRecord.mdTraceIntoIntoTraceRecord/tiit单步步入直到进入已记录的追踪覆盖范围未指定最大步数时默认50000步条件追踪的完整机制见 ConditionalTracing.md。5.2 第二步录制在追踪执行期间每条被单步或追踪到的指令都会立即出现在 Trace 视图中见 Trace.md 说明但若直接让程序自由运行run则不会记录这些指令——录制只覆盖步进/追踪路径。5.3 第三步停止录制录制完成后执行StopTraceRecording或StopRunTrace、tc。日志区会输出Trace recording stopped.文件句柄关闭、录制状态复位之后可以随时用 Trace 视图的Open / Recent files重新打开该文件回放回放时推荐同时调试对应的被调试程序以便用其数据库中的标签渲染指令。5.4 实际调用路径与 GUI 联动停止命令不仅在命令行可用GUI 的Trace 视图 → Stop trace recording菜单、以及关闭追踪文件操作底层都通过DbgCmdExecDirect(StopTraceRecording)执行同一命令见 TraceBrowser.cpp 与 TraceBrowser.cpp。此外当调试会话结束StopDebug等时调试器清理流程也会主动调用TraceRecord.enableTraceRecording(false, nullptr)停止录制debugger.cpp避免遗留悬挂的文件句柄。因此该命令的完整调用链可概括为命令行/GUI/脚本 → dbgcmdnew 注册的 cbDebugStopTraceRecording → TraceRecord.enableTraceRecording(false, nullptr) → CloseHandle(rtFile) rtEnabledfalse → CB_STOPTRACE 插件回调广播六、脚本与自动化场景由于tc是 OllyScript 兼容别名在 x64dbg 脚本中可以这样组织一个录制-停止片段示意opentrace C:\traces\run1.trace64 ticnd eax0, 10000 tc即开启追踪文件 → 条件步进录制至eax 0或 10000 步 →tc停止并落盘。停止命令不设置任何结果变量因此脚本中无需也无法通过$result判断其成败如需判断录制是否真正生效可结合日志输出或检查追踪文件是否生成。七、小结与最佳实践StopTraceRecording/StopRunTrace/tc虽是一个无参命令但它串联了 x64dbg 运行追踪的完整生命周期命令注册x64dbg.cpp、参数校验与委托cmd-tracing.cpp、底层文件关闭与状态复位TraceRecord.cpp、GUI 联动TraceBrowser.cpp与调试会话收尾debugger.cpp。实践要点停止前确保追踪文件路径显式带扩展名trace32/trace64不会自动补全停止命令幂等且可在非调试状态调用可放心放入脚本收尾追踪文件是TRAC魔数 JSON 头 指令记录的结构停止后仍可反复打开回放Trace.md插件可通过CB_STOPTRACE回调感知追踪结束实现自动化后处理。【免费下载链接】x64dbgAn open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.项目地址: https://gitcode.com/gh_mirrors/x6/x64dbg创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

PDF转Word全攻略:从原生电子版到扫描件OCR的高保真转换方案 2026/9/19 22:50:02

PDF转Word全攻略:从原生电子版到扫描件OCR的高保真转换方案

1. 为什么PDF转Word至今仍是高频刚需1.1 从热搜词看真实需求分布翻了一圈近期的搜索热词,PDF转Word这个看似“老掉牙”的话题,实际上需求一点没减少,反而因为AI工具的普及衍生出了更多细分场景。热搜词里既有“pdf转word”这种基础需求&#…

阅读更多 →
2026丽江电气检测机构排名 TOP5 CMA 资质机构提供防爆设备检测+防爆安全检测 联系方式推荐 2026/9/19 22:50:02

2026丽江电气检测机构排名 TOP5 CMA 资质机构提供防爆设备检测+防爆安全检测 联系方式推荐

丽江电气防爆检测机构鳞次栉比,鱼龙混杂,化工园区、油库加油站、矿山厂区、制药企业、危化品仓储场所开展防爆电气安全排查与生产验收时,大量无资质机构出具的检测报告往往无法通过应急管理部门核查,令人头疼不已。小编实地走访筛…

阅读更多 →
QuickRecorder 快速上手指南:如何在5分钟内完成第一次 macOS 屏幕录制 2026/9/19 22:50:02

QuickRecorder 快速上手指南:如何在5分钟内完成第一次 macOS 屏幕录制

QuickRecorder 快速上手指南:如何在5分钟内完成第一次 macOS 屏幕录制 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitcode…

阅读更多 →
2026乐山电气检测机构排名 TOP5 CMA 资质机构提供防爆设备检测+防爆安全检测 联系方式推荐 2026/9/19 22:50:02

2026乐山电气检测机构排名 TOP5 CMA 资质机构提供防爆设备检测+防爆安全检测 联系方式推荐

乐山电气防爆检测市场近年持续升温,化工园区、油库加油站、矿山厂区、制药企业、危化品仓储场所开展防爆电气安全排查与生产验收时,大量无资质机构出具的报告无法通过应急管理部门核查,令企业主头疼不已。小编实地走访筛选本地正规第三方电气…

阅读更多 →
DeepSeek-R1-Distill-Qwen-7B WebDemo 部署:用 Streamlit 构建带“思考过程“展示的推理聊天界面 2026/9/19 22:50:02

DeepSeek-R1-Distill-Qwen-7B WebDemo 部署:用 Streamlit 构建带“思考过程“展示的推理聊天界面

DeepSeek-R1-Distill-Qwen-7B WebDemo 部署:用 Streamlit 构建带"思考过程"展示的推理聊天界面 【免费下载链接】self-llm 《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型…

阅读更多 →
ant-design Select 组件 maxCount 属性完全指南:限制多选最大数量 2026/9/19 22:47:01

ant-design Select 组件 maxCount 属性完全指南:限制多选最大数量

前端UI组件设计系统 【免费下载链接】ant-design An enterprise-class UI design language and React UI library 项目地址: https://gitcode.com/gh_mirrors/ant/ant-design 点击查看 免费下载 maxCount 是 ant-design Select 组件中用于约束最多可选中项数量的核…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞