尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
x64dbg argumentlist 命令详解:在引用视图中列出与脚本化遍历用户自定义参数
x64dbg argumentlist 命令详解在引用视图中列出与脚本化遍历用户自定义参数【免费下载链接】x64dbgAn open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.项目地址: https://gitcode.com/gh_mirrors/x6/x64dbg导读argumentlist是 x64dbg 用户数据库User Database系列命令之一用于在**引用视图Reference View**中集中列出当前调试会话里所有用户自定义的参数argument区间并以$result变量返回参数数量方便脚本继续处理。本文以官方命令文档 argumentlist.md 为主体结合 x64dbg 源码cmd-user-database.cpp、argument.h、argument.cpp与表达式函数实现exprfunc.cpp完整讲解命令用法、底层数据结构和脚本化遍历方案让读者既能上手操作也能理解其实现原理。一、命令速览argumentlist是用户数据库命令组中的一员。该命令组用于操作调试器持久化的用户标注数据官方索引见 docs/commands/user-database/index.rst其中与 argument 相关的命令共有四条命令作用argumentadd添加一个参数区间起始地址、结束地址argumentdel按地址删除一个参数argumentlist在引用视图中列出全部参数argumentclear清除所有模块中的全部参数这些命令在调试器启动时注册于 src/dbg/x64dbg.cppdbgcmdnew(argumentadd, cbInstrArgumentAdd, true); //add argument dbgcmdnew(argumentdel, cbInstrArgumentDel, true); //delete argument dbgcmdnew(argumentlist, cbInstrArgumentList, true); //list arguments dbgcmdnew(argumentclear, cbInstrArgumentClear, false); //delete all arguments注意dbgcmdnew的第三个参数为true时表示该命令可在脚本中注册使用argumentclear传false即它不用于脚本注册场景。基本用法argumentlistarguments参数argumentlist没有任何参数直接执行即可。result结果执行后$result变量会被设置为用户自定义参数的总数量如果没有参数$result为 0同时在日志中输出No arguments。实际输出效果执行命令后引用视图被重置并以 Arguments 为标题显示 4 列内容Start参数区间的起始地址End参数区间的结束地址Disassembly (Start)起始地址处的反汇编指令Label/Comment起始地址对应的标签若无标签则显示注释。视图每行还会附带一个 Delete 命令内部执行argumentdel $0其中$0为当前行地址可直接在引用视图中对某一项发起删除。二、源码级解析argumentlist 是如何工作的命令的核心实现位于 src/dbg/commands/cmd-user-database.cpp 的cbInstrArgumentList函数其执行流程如下初始化引用视图通过GuiReferenceInitialize、GuiReferenceAddColumn建立上述 4 列并把行数清零枚举参数先以ArgumentEnum(0, cbsize)获取所需缓冲区大小若无参数则打印No arguments并提前返回分配内存并填充使用MemoryARGUMENTSINFO*分配缓冲区再次调用ArgumentEnum填充数据计算条目数count cbsize / sizeof(ARGUMENTSINFO)逐行写入视图对每条参数分别取出start、end地址并通过GuiGetDisassembly、LabelGet、CommentGet补充反汇编、标签或注释内容设置$resultvarset($result, count, false)将参数总数写入结果变量附加删除命令并刷新GuiReferenceAddCommand(..., argumentdel $0)后GuiReferenceReloadData()刷新视图。其中ArgumentEnum定义于 src/dbg/argument.cpp它直接委托给内部容器Arguments::Enum(List, Size)负责以ARGUMENTSINFO数组的形式导出全部参数。底层数据结构每条参数在内存中对应 src/dbg/argument.h 定义的ARGUMENTSINFO结构体struct ARGUMENTSINFO { duint modhash; // 所属模块的哈希用于定位模块 duint start; // 参数区间起始地址 duint end; // 参数区间结束地址 bool manual; // 是否由用户手动添加区别于自动分析 duint instructioncount; // 区间内指令数 std::string mod() const { return ModNameFromHash(modhash); } };参数数据集中存放在内部容器Arguments静态实例arguments见 argument.cpp中。相关操作函数均在 argument.h 声明ArgumentAdd(Start, End, Manual, InstructionCount)新增参数内部会先校验起始地址可读MemIsValidReadPtr见 argument.cppArgumentDelete(Address)按地址删除参数见 argument.cppArgumentGet / ArgumentGetInfo按地址查询参数信息ArgumentOverlaps / ArgumentDelRange区间重叠判断与区间删除ArgumentClear清空全部参数ArgumentEnum枚举导出参数列表ArgumentCacheSave / ArgumentCacheLoad参数的数据库持久化存取。也就是说argumentlist本质上是把ArgumentEnum的结果通过 GUI 桥接层GuiReference*系列渲染到引用视图并把枚举计数回写到$result。三、配合引用视图表达式函数在脚本中遍历参数原文档特别指出引用视图的内容可以在脚本中用ref.addr表达式函数 进行迭代。argumentlist执行后引用视图中的每一行都对应一条参数记录因此可以结合ref.count()与ref.addr(i)逐条读取。表达式函数实现这两个函数注册于 src/dbg/expressionfunctions.cppRegisterEasy(ref.count, refcount); RegisterEasy(ref.addr,ref, refaddr);其实现位于 src/dbg/exprfunc.cppduint refcount() { return GuiReferenceGetRowCount(); } duint refaddr(duint row) { auto content GuiReferenceGetCellContent(int(row), 0); duint addr 0; valfromstring(content, addr, false); BridgeFree(content); return addr; }ref.count()直接返回引用视图当前的行数与$result在数值上一致都是参数总数ref.addr(i)读取引用视图第i行第 0 列即 Start 列的地址字符串解析为duint地址后返回。由于参数列表的 Start 列正是参数起始地址脚本拿到后即可对每条参数做进一步处理。官方脚本示例原文完整继承在脚本.txt 脚本由scriptload加载执行中可这样遍历引用视图中的全部参数i 0 loop: addr ref.addr(i) log reference {d:i} {p:addr} i cmp i, ref.count() jne loop脚本逻辑说明i 0初始化行索引addr ref.addr(i)取第i行的起始地址log reference {d:i} {p:addr}以十进制打印行号、以指针格式打印地址i递增cmp i, ref.count()与jne loop形成循环直到遍历完所有行。该写法同样适用于其他填充引用视图的命令如commentlist、labellist、functionlist等参见 docs/commands/user-database/是 x64dbg 脚本中处理引用数据的通用套路。四、与 argument 家族命令的配合使用要理解argumentlist的输入输出需要掌握其配套命令官方文档同样位于 docs/commands/user-database/。argumentadd —— 添加参数参数arg1为参数区间起始地址arg2为参数区间结束地址结果不设置任何结果变量。源码实现见 cmd-user-database.cpp两个地址都会经valfromstring解析因此支持表达式随后调用ArgumentAdd(start, end, true)Manual置true表示用户手动添加。添加成功后打印Argument added!并刷新所有视图。argumentdel —— 删除参数参数arg1为参数区间内的任意地址结果不设置任何结果变量。实现见 cmd-user-database.cpp内部调用ArgumentDelete(addr)成功则打印Argument deleted!。正如上文所述argumentlist的引用视图行内 Delete 命令正是包装为argumentdel $0。argumentclear —— 清空全部参数参数无结果不设置任何结果变量。对应ArgumentClear(false)一次性删除所有模块中的全部参数。典型工作流// 1. 定义参数区间 argumentadd 0x401000, 0x4012FF // 2. 列出全部参数引用视图中查看$result 记录数量 argumentlist log total arguments: {d:$result} // 3. 脚本遍历引用视图处理每条参数 i 0 loop: addr ref.addr(i) log argument start {p:addr} i cmp i, ref.count() jne loop // 4. 按需删除/清空 argumentdel 0x401050 // 删除包含该地址的参数区间 argumentclear // 或一键清空五、注意事项与使用限制引用视图是单例的执行argumentlist会覆盖引用视图的当前内容其他引用类命令同理。若需保留数据应先用ref.get/ 循环脚本把数据读出。$result与ref.count()两者数值一致但$result是命令结束时的一次性快照若之后引用视图被其他命令改写ref.count()会反映新内容而$result不变。地址必须可读添加参数时ArgumentAdd会通过MemIsValidReadPtr校验起始地址可读非法地址将导致Failed to add argument。删除依据为区间包含argumentdel接受区间内任意地址即可命中删除底层通过VaKey(Address, Address)查找所在区间无需精确给出起始地址。持久化参数属于用户数据库的一部分可通过dbsave/dbload见 docs/commands/user-database/dbsave.md、docs/commands/user-database/dbload.md随数据库文件保存和加载底层由ArgumentCacheSave / ArgumentCacheLoad支撑。六、小结argumentlist虽是一个无参的简单命令却是 x64dbg 用户数据库中查看参数类标注的核心入口它把内部Arguments容器中的数据通过引用视图呈现给用户用$result暴露数量并以ref.addr/ref.count表达式函数向脚本开放逐行访问能力。结合argumentadd、argumentdel、argumentclear即可完成参数标注的增删查清全流程配合官方脚本示例可方便地对参数列表做自动化分析处理。【免费下载链接】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

相关推荐

OpenClaw 可视化装完,Windows 模型通道走 TaoToken 再养虾

OpenClaw 可视化装完,Windows 模型通道走 TaoToken 再养虾

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/19 22:13:52
TimePillars:基于时序融合与2D卷积的远距离3D目标检测实战

TimePillars:基于时序融合与2D卷积的远距离3D目标检测实战

1. 项目缘起:为什么200米外的小目标这么难检做过户外LiDAR感知的人都有一个共同的痛:50米内的车、人、锥桶,随便一个PointPillars都能跑出不错的mAP,但只要把距离拉到200米开外,尤其是那些只有几个点反射回来的小目标—…

📅 2026/9/19 22:13:52
CANN opbase 错误码 EZ1007(Invalid_Argument_Tensor_Input_Shape):Tensor 输入 Shape 维度错误定位与解决指南

CANN opbase 错误码 EZ1007(Invalid_Argument_Tensor_Input_Shape):Tensor 输入 Shape 维度错误定位与解决指南

CANN opbase 错误码 EZ1007(Invalid_Argument_Tensor_Input_Shape):Tensor 输入 Shape 维度错误定位与解决指南 【免费下载链接】opbase 本项目是CANN算子库的基础框架库,为算子提供公共依赖文件和基础调度能力。 项目地址: htt…

📅 2026/9/19 22:08:52
MORE NEWS

更多资讯

📰

高质量软件测试报告编写指南:缺陷聚类与覆盖率双验证

简介:本资源是一份结构完整、内容详实的软件测试报告编写模板范文,面向测试工程师、质量保障人员及参与项目交付的开发与产品经理,解决实际工作中测试报告缺乏规范性、要素不全、难以通过评审等痛点。文档采用标准Word格式(.doc&a…

📰

给武侠RPG加一套新武功:jynew的Mod与配置表玩法

给武侠RPG加一套新武功:jynew的Mod与配置表玩法 【免费下载链接】jynew JinYongLegend-like RPG Game Framework with full Modding support and 10 hours playable samples of game. 项目地址: https://gitcode.com/GitHub_Trending/jy/jynew 想给自己喜欢的…

📰

Glances 导出 Graphite 时序数据库完全指南:配置、命令与源码实现解析

指标监控监控大盘CLI告警MCP 服务 【免费下载链接】glances Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems. 项目地址: https://gitcode.com/gh_mirrors/gl/glances 点击查看 免费下载 Glances…

📰

全国大学生智能汽车竞赛获奖名单解析:从组别逻辑到国奖备赛全攻略

1. 从获奖名单说起:智能汽车竞赛到底在比什么每年一到总决赛放榜那几天,我的朋友圈和几个技术群里基本都会被同一件事刷屏——智能汽车竞赛的获奖名单。有人晒证书,有人发队伍合影,也有不少学弟学妹私信问我:“学长&am…

📰

Aider 实战:TaoToken 跑通 TypeScript 仓库接口重构

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

计算机视觉设计师简历PDF优化:从ATS解析到关键词命中

简介:面向人工智能与计算机视觉领域设计岗位的简历范例PDF,适合正在求职的视觉设计师、平面设计师、转岗候选人及应届生参考。资源内含两套完整简历范本,分别覆盖“1~2年工作经验”与“多年互联网视觉设计经验”两种写法&#xff…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬