news 2026/6/10 17:09:15

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
当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);

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

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

2005-2025年各省、地级市、上市公司人工智能创新发展试验区DID数据

在数字经济与人工智能深度融合的背景下&#xff0c;人工智能创新发展试验区作为国家推动 AI 技术落地、产业升级的核心载体&#xff0c;其政策实施效果的精准评估对优化创新治理体系具有关键意义。本数据基于双重差分&#xff08;DID&#xff09;方法构建&#xff0c;可有效剥离…

作者头像 李华
网站建设 2026/5/31 8:05:42

YHM4005CSST看门狗芯片

YHM4005CSST 是上海爻火微电子推出的带单线通信功能的看门狗芯片,核心用于监测主控设备的程序运行状态,避免 “死机”,具体信息如下: 一、芯片核心特性 功能:兼具看门狗复位+单线通信配置能力,支持超时周期可配置(通过单线通信调整)。 供电:宽电压 2.5V~5.5V,兼容 3…

作者头像 李华
网站建设 2026/6/10 13:02:43

雷达原理 魏青 使用的是第三版教材 软性开关脉冲调制器

一、概念与工作特征 软性开关脉冲调制器(soft-switch pulse modulator)的基本特点是:调制开关的前沿由外加的触发脉冲控制,使开关导通;但开关的截止并不由触发脉冲的后沿直接控制,而是由开关器件本身和整个放电过程决定。换言之,触发脉冲仅确定脉冲的起始点;当储能元件…

作者头像 李华
网站建设 2026/5/29 21:20:57

开题报告 “卡关” 到焦虑?虎贲等考 AI:1 小时生成 “导师眼前一亮” 模板,创新点直击核心

开题报告是论文创作的 “第一块敲门砖”&#xff0c;直接决定研究方向的可行性与学术价值。但多数学生和科研人都困在这一步&#xff1a;选题无创新被否定、研究方案逻辑断层被打回、技术路线模糊被要求重写&#xff0c;反复修改耗时数周仍难达标。普通 AI 工具仅能生成基础框架…

作者头像 李华
网站建设 2026/6/10 14:14:19

深度测评9个AI论文网站,自考学生轻松搞定毕业论文!

深度测评9个AI论文网站&#xff0c;自考学生轻松搞定毕业论文&#xff01; AI 工具如何助力自考学生高效完成论文写作 随着人工智能技术的不断进步&#xff0c;AI 工具在学术写作领域的应用越来越广泛。对于自考学生而言&#xff0c;撰写毕业论文是一项既重要又充满挑战的任务。…

作者头像 李华