news 2026/1/25 16:37:53

While循环逆向分析特征

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
While循环逆向分析特征

文章目录

    • 一、对应的 C 代码与关键汇编
    • 二、while 循环的典型逆向特征
      • 1. 控制流模式:前测试循环(pre-test loop)
      • 2. 循环变量的使用特征
      • 3. 与 for 循环的区别特征(和你前一个示例对比)
    • 三、结合本例的一句话总结

一、对应的 C 代码与关键汇编

C 代码:

voidfunc2(){intindex=0;while(index<10){printf("%d",index);index++;}return;}

while (index < 10)直接对应的汇编核心部分是:

; 变量初始化 00071B86 mov dword ptr [index],0 ; 条件判断:index < 10 ? 00071B8D cmp dword ptr [index],0Ah 00071B91 jge __$EncStackInitStart+43h (071BAFh) ; index >= 10 跳出循环 ; 循环体:printf("%d", index); 00071B93 mov eax,dword ptr [index] 00071B96 push eax 00071B97 push offset string "%d" (07AC04h) 00071B9C call _printf (071541h) 00071BA1 add esp,8 ; index++; 00071BA4 mov eax,dword ptr [index] 00071BA7 add eax,1 00071BAA mov dword ptr [index],eax ; 跳回条件判断 00071BAD jmp __$EncStackInitStart+21h (071B8Dh)

二、while 循环的典型逆向特征

结合这段代码,可以概括while (条件)在 MSVC Debug 未优化下的典型汇编特征。

1. 控制流模式:前测试循环(pre-test loop)

结构非常标准:

index = 0; ; 初始化 cond: if (index >= 10) goto end; ; 条件判断(不满足条件就退出) ... 循环体 ... index++; ; 在循环体内部更新 goto cond; ; 回到条件处重新判断 end: ... 循环后代码 ...

在汇编中对应为:

  1. 初始化在前、紧接着就是条件判断

    mov [index], 0 ; 初始化 cmp [index], 0Ah ; 与 10 比较 jge end ; index >= 10 跳出

    特征:

    • 初始化之后没有jmp到别处,而是直接cmp+ 条件跳转,说明第一次进入循环前就做判断——这是典型的while/for“前测试型”循环,而不是do...while那种后测试。
  2. 条件跳转直接是“跳出循环”的出口

    cmp [index], 0Ah jge end ; 满足退出条件时直接跳出到循环后
    • jge(大于等于)配合前面的cmp:逻辑上就是index < 10时才进入循环体。
    • 在逆向时,看到条件跳转目标在循环之后,而“顺序执行”落到循环体内,就是 while / for 常见模式。
  3. 循环体内修改循环变量,体尾有回跳到条件判断

    ; 循环体... printf(...); ; index++ mov eax, [index] add eax, 1 mov [index], eax ; 回到条件判断 jmp cond

    核心特征:

    • 更新循环变量(自增、自减等)在循环体内
    • 循环体最后一个有效控制流指令是jmp cond,跳回条件检查的cmp那里。

2. 循环变量的使用特征

index为例(这里编译器把它放在栈上的某个[ebp-偏移],你这份反汇编被符号化成[index]):

  • 初始化

    mov dword ptr [index], 0
  • 参与比较(条件判断)

    cmp dword ptr [index], 0Ah
  • 在循环体里作为函数参数使用

    mov eax, dword ptr [index] push eax ; 传给 printf
  • 在循环体里被线性更新(自增)

    mov eax, dword ptr [index] add eax, 1 mov dword ptr [index], eax

在逆向时,如果看到一个栈变量(某个固定偏移)具有以下模式:

  1. 先被赋一个初值;
  2. 紧接着用来和某个常量比较,以决定是否跳出某段重复执行的代码;
  3. 在这段重复执行的代码内部被简单线性修改(加减 1、加减常数);
  4. 代码尾部有跳转回比较位置;

那么这个变量就是典型的循环计数器,这段结构就是一个循环。

3. 与 for 循环的区别特征(和你前一个示例对比)

你前一个示例是for (int index = 0; index < 10; index++),其 Debug 版汇编大致是:

init: index = 0 jmp cond inc: index++ cond: cmp index, 10 jge end body: ... jmp inc

而现在的while (index < 10) { ... index++; }的形态是:

init: index = 0 cond: cmp index, 10 jge end body: ... index++ jmp cond

对比要点:

特征点for 循环(上一个例子)while 循环(本例)
初始化后是否立刻 jmp是,jmp cond否,初始化后直接落到cmp条件判断
递增代码位置单独一个inc块,循环体之后跳回这里在循环体内部、条件判断之后
最后一个回跳目标回到inc,再走到cond直接回到cond
常见 C 形式for (init; cond; inc) { body }init; while (cond) { body; inc; }

因此,在逆向时:

  • 看到init 之后立刻一个无条件跳到后面某处,再看到那处后上方有更新变量的块,则更像for
  • 看到init 后直接 cmp / jcc 做条件判断,更新变量在循环体内部,体尾直接 jmp 回 cmp,则更像while(或for写成 while 形式)。

三、结合本例的一句话总结

这段while (index < 10)在汇编中的逆向特征可以一句话概括为:

使用栈上的局部变量[index]作为计数器,先mov [index],0初始化,然后紧接着在同一条执行路径上用cmp [index],0Ah / jge end做前置条件判断,若未跳出则执行循环体中的printfindex++,最后通过jmp返回到条件判断位置,如此形成init → cond(cmp+jcc) → body(含 index++ ) → jmp cond的典型前测试 while 循环控制流结构。这种“初始化后直接条件判断、循环体结尾跳回条件、循环变量在体内更新”的组合,就是识别 while 循环的主要逆向特征。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/21 3:50:29

网络安全口令破解类型详解

【必藏】网络安全工程师必备&#xff1a;密码攻击原理与防御策略全解析 本文全面介绍了密码安全的攻防技术&#xff0c;包括字典攻击、暴力破解、组合攻击等多种攻击手段及其技术原理&#xff0c;并提供了对应的防御策略。文章详细分析了社会工程学、物理攻击和恶意软件等非技…

作者头像 李华
网站建设 2026/1/16 17:28:36

数组的逆向特征

文章目录一、先给出结论&#xff08;逆向视角&#xff09;二、栈帧 & 数组整体布局&#xff08;关键&#xff09;1️⃣ 栈帧大小2️⃣ 数组起始地址3️⃣ 为什么是 int Arr[10]&#xff1f;三、数组初始化的逆向特征&#x1f50d; 逆向判断技巧四、数组下标访问的核心特征&…

作者头像 李华
网站建设 2026/1/16 20:31:47

Stable Diffusion+分类器联动教程:云端GPU 5分钟出图

Stable Diffusion分类器联动教程&#xff1a;云端GPU 5分钟出图 引言&#xff1a;电商美工的AI效率革命 作为一名电商美工&#xff0c;你是否经常遇到这样的烦恼&#xff1a;每天需要处理上百张商品图片&#xff0c;既要手动分类不同品类&#xff08;如服装、家居、数码&…

作者头像 李华
网站建设 2026/1/22 11:38:31

分类模型新手指南:云端GPU+镜像,零失败体验

分类模型新手指南&#xff1a;云端GPU镜像&#xff0c;零失败体验 引言&#xff1a;为什么选择云端分类模型&#xff1f; 分类模型是AI领域最基础也最实用的技术之一。简单来说&#xff0c;它就像一位智能分拣员&#xff0c;能够自动将各种数据归类——比如区分猫狗图片、判断…

作者头像 李华
网站建设 2026/1/16 18:30:50

Maya 渲染过程中频繁崩溃怎么办?原因分析与完整解决方案

原创声明&#xff1a;本文为原创技术文章&#xff0c;结合 Maya 官方文档、行业实践经验及常见渲染问题进行系统整理与总结&#xff0c;内容已进行结构化重写与技术归纳&#xff0c;非简单转载或翻译。转载请注明作者及来源&#xff0c;侵权必究。在三维动画、影视特效制作过程…

作者头像 李华
网站建设 2026/1/21 1:39:33

单目深度估计实战:手册

单目深度估计实战&#xff1a;手册 1. 引言 1.1 业务场景描述 在计算机视觉领域&#xff0c;从单张二维图像中恢复三维空间结构是一项极具挑战性的任务。传统方法依赖多视角几何或激光雷达等硬件设备&#xff0c;成本高且部署复杂。随着深度学习的发展&#xff0c;单目深度估…

作者头像 李华