当前位置: 首页 > news >正文

数组初始化的编译模式特征

文章目录

    • 数组初始化的编译模式特征
      • 1. **局部数组存储位置**
      • 2. **显式初始化部分**
      • 3. **未显式初始化部分的处理**
      • 4. **内存布局特征**
      • 5. **编译器优化特征**
      • 6. **初始化模式识别**
      • 7. **逆向识别线索**
8:intArr[10]={1};00F21DE0 mov dword ptr[Arr],100F21DE7 xor eax,eax00F21DE9 mov dword ptr[ebp-2Ch],eax00F21DEC mov dword ptr[ebp-28h],eax00F21DEF mov dword ptr[ebp-24h],eax00F21DF2 mov dword ptr[ebp-20h],eax00F21DF5 mov dword ptr[ebp-1Ch],eax00F21DF8 mov dword ptr[ebp-18h],eax00F21DFB mov dword ptr[ebp-14h],eax00F21DFE mov dword ptr[ebp-10h],eax00F21E01mov dword ptr[ebp-0Ch],eax9:10:intArr2[10]={1,2};00F21E04mov dword ptr[Arr2],100F21E0B mov dword ptr[ebp-5Ch],200F21E12xor eax,eax00F21E14mov dword ptr[ebp-58h],eax00F21E17mov dword ptr[ebp-54h],eax00F21E1A mov dword ptr[ebp-50h],eax00F21E1D mov dword ptr[ebp-4Ch],eax00F21E20mov dword ptr[ebp-48h],eax00F21E23mov dword ptr[ebp-44h],eax00F21E26mov dword ptr[ebp-40h],eax00F21E29mov dword ptr[ebp-3Ch],eax

数组初始化的编译模式特征

1.局部数组存储位置

  • Arr:栈帧偏移[ebp-30h]开始,占用40字节
  • Arr2:栈帧偏移[ebp-60h]开始,占用40字节

2.显式初始化部分

  • Arr[10]:仅第一个元素显式赋值为1
    mov dword ptr [Arr],1 ; Arr[0] = 1
  • Arr2[10]:前两个元素显式赋值
    mov dword ptr [Arr2],1 ; Arr2[0] = 1 mov dword ptr [ebp-5Ch],2 ; Arr2[1] = 2

3.未显式初始化部分的处理

  • 统一清零模式:使用xor eax,eax+ 连续mov指令
    xor eax,eax ; eax = 0 mov dword ptr [ebp-XXh],eax ; 逐一清零剩余元素
  • 清零范围
    • Arr:位置[ebp-2Ch][ebp-0Ch](9个元素)
    • Arr2:位置[ebp-58h][ebp-3Ch](8个元素)

4.内存布局特征

  • 连续存储:每个数组元素按4字节对齐连续排列
  • 反向偏移:数组在栈中从低地址向高地址增长
  • 固定间隔:数组元素间固定偏移4字节(int类型)

5.编译器优化特征

  • 高效清零:使用xor eax,eax而非mov eax,0
  • 批量移动:未使用循环,而是展开的连续mov指令
  • 直接内存操作:所有初始化直接在栈内存完成,未经过寄存器中转

6.初始化模式识别

模式1(部分初始化后清零):

mov [base], value ; 第一个元素赋值 xor reg, reg ; 准备零值 mov [base+4], reg ; 清零第二个元素 mov [base+8], reg ; 清零第三个元素 ... ; 重复直到数组结束

模式2(多个显式值后清零):

mov [base], value1 ; 第一个元素 mov [base+4], value2 ; 第二个元素 xor reg, reg ; 准备零值 mov [base+8], reg ; 清零第三个元素 ... ; 清零剩余元素

7.逆向识别线索

  • 数组开始标记:非零值的直接内存写入
  • 数组边界确定:连续清零操作序列的结束
  • 数组大小推断:通过偏移量计算(每个int占4字节)
  • 初始化值确定:显式的mov指令值 vs 清零的默认值
http://www.jsqmd.com/news/234320/

相关文章:

  • C++ 中的 struct vs class:不是语法差异,而是工程语义的选择
  • MiDaS实战指南:如何提升深度估计的准确性
  • 高性能中文NER服务上新|动态高亮+极速推理一键启动
  • 开发者友好型NER工具上线|支持API与Web双模式调用
  • 零代码玩转AI分类:云端GPU可视化工具,鼠标拖拽就出结果
  • 单目深度估计技术对比:MiDaS vs 传统方法
  • 网络安全行业,真的吃证书!
  • 基于STM32F051的BLDC直流无刷电机电调开发之旅
  • 边缘可部署的实时翻译方案|基于HY-MT1.5-1.8B模型实践解析
  • 20260112_161429_2025年十大网络安全事件盘点:数字风险已闯入寻常生活
  • MiDaS小型模型部署:资源受限环境最优方案
  • 多语言分类实战:XLM-RoBERTa云端部署指南
  • 零代码玩转AI分类:万能分类器镜像1块钱起试用
  • 别再问了!高校网络安全 36 个名词,一篇看懂不踩坑
  • 【Java毕设全套源码+文档】基于springboot的“图书森林”共享图书管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • Spark详解
  • 实战解析:1688详情api商品sku、主图数据
  • 绕_WAF_实战:6_种_SQL_注入变形技巧!
  • Qwen3-VL-WEBUI镜像全解析|聚焦视觉编码增强与空间感知升级
  • 分类模型持续学习:万能分类器在线更新+弹性GPU支持
  • 自动化监测如何省心?无线采集器+投入式水位计的黄金组合解析!​
  • 30_个内网渗透信息收集技巧,吃透了,内网横着走!
  • 分类模型微调实战:万能分类器+云端GPU 3小时出结果
  • MiDaS深度感知系统搭建:企业级应用部署指南
  • 【Java毕设源码分享】基于springboot+vue的智能垃圾分类系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 信息抽取新利器|AI智能实体侦测服务助力文本语义分析
  • AI万能分类器5分钟上手:小白用云端GPU,1小时仅1块钱
  • AI分类器商业应用第一课:低成本验证创意
  • 单目视觉3D感知:MiDaS模型实战教程
  • 科研与工程场景必备|AI智能实体侦测服务支持多实体高亮