拓冰建站拓冰建站
首页 / 资讯中心 / 正文

x64dbg 命令详解:inc — 对变量、寄存器与内存目标执行自增运算

逆向工程调试器开发工具应用安全【免费下载链接】x64dbgAn open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.项目地址https://gitcode.com/gh_mirrors/x6/x64dbg点击查看免费下载inc是 x64dbg 调试器命令行中的一条通用计算命令用于对指定目标的值执行自增1操作。它对应汇编语言中的INC指令语义是编写调试脚本、逆向分析辅助计算时最高频的基础命令之一。阅读本文后你将掌握inc的完整语法、可作用的目标类型、其在表达式系统底层的实现原理以及与dec、add等兄弟命令的配合用法。命令语法与参数inc的官方文档docs/commands/general-purpose/inc.md定义非常简洁核心要点如下inc arg1参数说明arg1目标Destination即要被自增的值所在的位置语法要点该命令只接受一个必需参数arg1arg1可以是用户变量、寄存器、内存地址使用[ ]语法或任意可求值的表达式目标命令执行后不设置任何结果变量result variables。该命令与文档目录 docs/commands/general-purpose/index.rst 中归类的其他通用计算命令dec、add、sub、mul、div、and、or、xor等属于同一族共同构成了 x64dbg 命令行的计算指令集。典型用法示例inc最直观的语义等价于 C 语言中的x下面是在 x64dbg 命令框中可直接执行的示例// 自增用户变量 inc myvar // 自增寄存器 inc eax inc rcx // 自增指定地址处的内存值 inc [00401000]由于inc直接修改目标本身它非常适合在脚本循环中充当计数器// 配合循环实现循环 N 次的计数 count 0 loop_start: ... // 循环体 inc count cmp count, 10 jne loop_start这里inc count每次将用户变量count加 1再配合 cmp 与条件跳转实现循环控制是 x64dbg 脚本中非常典型的计数器写法。变量本身通过变量名 值的方式自动创建参考 var/varnew 的说明日常无需显式声明变量。源码级实现解析inc命令的实际行为可以在源码中得到完整验证其实现链路贯穿命令注册、命令回调与表达式解析三层。1. 命令注册在调试器引擎的入口文件 src/dbg/x64dbg.cpp 中inc与同族命令一起被注册到命令系统//general purpose dbgcmdnew(inc, cbInstrInc, false); dbgcmdnew(dec, cbInstrDec, false); dbgcmdnew(add, cbInstrAdd, false); dbgcmdnew(sub, cbInstrSub, false);第三个参数false表明该命令的注册信息不参与某些需要特殊处理的场景具体可参考dbgcmdnew的调用约定从源码结构看它属于标准命令注册。2. 命令回调把 inc 翻译为后缀自增表达式inc的回调函数cbInstrInc位于 src/dbg/commands/cmd-general-purpose.cppbool cbInstrInc(int argc, char* argv[]) { if(IsArgumentsLessThan(argc, 2)) return false; return cmddirectexec(StringUtils::sprintf(%s, argv[1]).c_str()); }实现非常巧妙inc命令本身并不做任何算术运算而是将inc arg1转换为表达式arg1再通过cmddirectexec交给 x64dbg 的表达式解析器执行。这正是它能天然支持变量、寄存器、内存目标等多种类型的原因——它完全复用了表达式系统的赋值能力。与之对应同文件中的 cbInstrDec 将dec arg1转换为arg1--cbInstrAdd 转换为arg1arg2cbInstrMul 转换为arg1*arg2可见整族命令都共享先改写为复合赋值/自增表达式再交给解析器的统一设计。3. 表达式解析器中的 运算符运算符在表达式词法分析阶段被识别为前缀或后缀自增 Tokensrc/dbg/expressionparser.cppaddOperatorToken(, isUnaryOperator() ? Token::Type::OperatorPrefixInc : Token::Type::OperatorSuffixInc);由于cbInstrInc生成的是arg1运算符在操作数之后因此走的是OperatorSuffixInc分支。其求值逻辑位于 src/dbg/expressionparser.cppcase ExpressionParser::Token::Type::OperatorSuffixInc: resultv op1v; break; ... if(!handleAssignment(op1.data.c_str(), op1v, silent, allowassign)) return false; result ExpressionParser::EvalValue(resultv);即先求取操作数当前值op1v自增后通过handleAssignment将新值写回目标变量或寄存器而表达式自身的求值结果resultv是自增前的旧值——这与 C 语言后缀自增的语义完全一致。IsArgumentsLessThan(argc, 2)的预检查保证缺少arg1时命令直接返回失败不会产生未定义行为。结果变量与注意事项官方文档明确说明该命令不设置任何结果变量。这意味着执行inc后$result、$_EZ_FLAG、$_BS_FLAG等结果变量不会被本次命令修改如果脚本需要在自增的同时保留旧值供后续使用应改用表达式写法例如old myvar; inc myvar自行保存若目标不存在例如拼写错误的变量名handleAssignment阶段会报错并返回失败命令不会静默创建不存在的变量。与同族命令一样inc适用于 32 位与 64 位两种调试目标寄存器目标同样受支持inc eax即自增 32 位 EAXinc rax自增 64 位 RAX。从命令族的整体设计看参考 mov 的文档说明通用标量目标均可直接操作而 SSE 等宽寄存器不在此列。小结inc虽短小却是 x64dbg 脚本体系中不可或缺的基础构件它把汇编级的自增语义抽象为一行命令底层通过表达式改写 统一赋值机制同时支持变量、寄存器和内存目标。理解其实现路径命令注册 →cbInstrInc改写为arg1→ 表达式解析器的后缀自增求值也就理解了dec、add、sub等整族通用计算命令的工作原理对编写高效的 x64dbg 自动化脚本大有裨益。赞分享逆向工程调试器开发工具应用安全【免费下载链接】x64dbgAn open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.项目地址https://gitcode.com/gh_mirrors/x6/x64dbg点击查看免费下载相关推荐x64dbg 命令详解movdqu/movups/movupd——用一条命令读写 XMM 寄存器与内存x64dbg 命令详解movdqu/movups/movupd——用一条命令读写 XMM 寄存器与内存 movdqu 及其别名 movups 、 movup逆向工程调试器开发工具应用安全x64dbg 中 vmovdqu/vmovups/vmovupd 命令详解YMM/ZMM 寄存器与内存的数据搬运指南x64dbg 中 vmovdqu/vmovups/vmovupd 命令详解YMM/ZMM 寄存器与内存的数据搬运指南 本指南围绕 x64dbg 调试器的通用指逆向工程调试器开发工具应用安全x64dbg 的 sub 命令表达式减法与寄存器、变量、内存的原地相减实战x64dbg 的 sub 命令表达式减法与寄存器、变量、内存的原地相减实战 导读 sub 是 x64dbg 命令行中用于原地相减的通用算术命令它把目标值逆向工程调试器开发工具应用安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门