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

当Ada记录类型含有可变长数组分量时的逆向分析

请看IDA生成的以下伪代码:

char *a7;//函数的输入参数 int v31; // ecx int v32; // ecx int v33; // edx int v34; // ebx int v35; // ecx int v36; // ecx int v37; // edx int v38; // eax int v39; // edx v31 = *a7; if ( v31 > 99 ) v31 = 99; v32 = (~(532 * v31 + 532) >> 31) & (532 * v31 + 532); v33 = *a7; if ( v33 < -1 ) v33 = -1; v34 = v32; if ( v32 > 532 * v33 + 532 ) v34 = 532 * v33 + 532; v35 = *a7; if ( v35 > 99 ) v35 = 99; v36 = (~(532 * v35 + 532) >> 31) & (532 * v35 + 532); v37 = *a7; if ( v37 < -1 ) v37 = -1; v38 = 532 * v37 + 532; v39 = v36; if ( v36 > v38 ) v39 = v38; server_types__default_carp_leg(&a7[v34 + 536 + v39 + v34]);

根据推断,a7是一个指针,在原始设计中它指向一个Ada的记录类型。

该类型的头部包含了3个可变长数组,数组的下标范围是[-1, 99]。

数组的分量又是一个记录,其长度是532个字节。

以下是改为C代码后定义的结构类型:

typedef struct { unsigned8 _0; unsigned8 _1; unsigned8 _2; server_types__lat_path_leg_t _4a[100]; server_types__lat_path_leg_t _4b[100]; server_types__lat_path_trans_t _4c[100]; server_types__lat_path_leg_t _4d; server_types__carp_leg_t carp_leg; } server_types__lat_pathsIP_t;

在上述结构类型定义中,分量_4a、_4b、_4c对应原始设计的三个可变长数组,但数组长度改为常数100。

类型server_types__lat_path_leg_t与server_types__lat_path_trans_t的长度都是532个字节。

调用函数server_types__default_carp_leg时的参数地址表达式:

v34 + 536 + v39 + v34

可解释为:

4 + v34 + v34 + v39 + 532

其中4是类型server_types__lat_pathsIP_t中的分量_0、_1、_2的长度,第一个v34是分量_4a的长度,第二个v34是分量_4b的长度,v39是分量_4c的长度,532是分量_4d的长度。

这个表达式的值是分量carp_leg在结构中的偏移量。

因此,这条函数调用语句的参数是分量carp_leg的地址。

在调用语句前的这段伪代码是由Ada编译器根据可变长数组的特性生成的,用于计算赋予v34和v39的值。

现在我们改为C代码后,不需要计算v34和v39了。

最后,整段伪代码简化为以下C代码:

server_types__lat_pathsIP_t* a7; server_types__default_carp_leg(&a7->carp_leg);

另外,如果原始设计者在定义这个记录类型时,把三个可变长数组分量放在记录的最后部分,就可省去关于其他分量的偏移量的计算。

http://www.jsqmd.com/news/211552/

相关文章:

  • 刀客doc:小米是时候切断和粉丝的脐带了
  • 全网最全8个AI论文软件,专科生搞定毕业论文+格式规范!
  • 使用FOFA挖掘Grafana CVE-2025-4123漏洞与赏金获取全记录
  • USB TYPE-C 公头连接器设计规范总结:提升可靠性、降本增效的关键指南
  • LSB与MSB:嵌入式开发中的核心概念详解
  • 手机电池连接器:现代电子设备的关键组件介绍
  • 救命神器!10款AI论文写作软件测评:本科生毕业论文必备
  • 睡眠检测模型复现与调试完整解决方案
  • 导师推荐!8款一键生成论文工具测评,本科生写论文不再难
  • 【大学院-筆記試験練習:线性代数和数据结构(4)】
  • 阶段三 在做movie这个项目时,有些同学使用本地高版本的JDK21来做这个项目时启动报错
  • **免费的剧本杀写作工具解析,新手创作者高效入门指南**
  • 科研数据 “躺赢” 秘籍!虎贲等考 AI 让数据分析零门槛 “出成果”
  • 喷砂除锈设备怎么选择?| 广东鑫百通喷砂机厂家
  • AI 写论文哪个软件最好?实测封神!虎贲等考 AI 凭 “真材实料 + 全链赋能” 登顶
  • **AI剧本杀创作工具2025推荐,提升创作效率与故事质量*
  • 开题报告 “卡关” 到焦虑?虎贲等考 AI:1 小时生成 “导师眼前一亮” 模板,创新点直击核心
  • 智能体系统一致性触发
  • VisionPro二开之相机调试界面
  • AI 写论文哪个软件最好?虎贲等考 AI 凭 “学术铁三角” 封神
  • 【人工智能学习-AI-MIT公开课第 16 讲:支持向量机(SVM)】
  • TDengine C/C++ 连接器进阶指南
  • 多Agent系统深度解析:从架构到通信,主流框架与任务调度策略全指南!
  • 写论文软件哪个好?拆解 “学术黑盒”:虎贲等考 AI 凭 “三维真功夫” 脱颖而出
  • 导师推荐8个AI论文平台,专科生轻松搞定毕业论文!
  • 5 款 AI 写论文哪个好?实测封神!虎贲等考 AI 凭 “真素材 + 硬实力” 碾压同类
  • 雷达原理 魏青 使用的是第三版教材 软性开关脉冲调制器
  • 术合规 “双清术”!虎贲等考 AI:降重 + 降 AIGC 一键清零,论文审核零返工
  • 虎贲等考 AI:AI 重构学术写作生态,全流程智能辅助赋能科研新可能
  • 期刊投稿 “陪跑” 多年?虎贲等考 AI:解锁核心期刊 “录用密钥”,投稿命中率翻倍