当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.mzph.cn/news/1124990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刀客doc:小米是时候切断和粉丝的脐带了

文/刀客doc(头条精选作者)刚刚&#xff0c;小米就“大熊事件”给出了一份相对完整的处理结果。公司发言人通过官微回应&#xff0c;公布了内部调查结论&#xff0c;文中称&#xff1a;“因为米粉&#xff0c;所以小米。米粉的信任和支持&#xff0c;是小米不断前行的基石。我们…

全网最全8个AI论文软件,专科生搞定毕业论文+格式规范!

全网最全8个AI论文软件&#xff0c;专科生搞定毕业论文格式规范&#xff01; AI 工具助力论文写作&#xff0c;专科生也能轻松应对 随着人工智能技术的不断发展&#xff0c;AI 工具在学术领域的应用越来越广泛。对于许多专科生来说&#xff0c;撰写毕业论文是一项既紧张又复杂的…

使用FOFA挖掘Grafana CVE-2025-4123漏洞与赏金获取全记录

我是如何通过FOFA发现Grafana中的“CVE-2025-4123”并获得赏金的 Hello Hunters&#xff01;我是Abdelrahman (A0xtrojan)&#xff0c;很高兴与大家分享我的技术文章&#xff0c;这篇文章记录了我在一个私人项目中的发现。话不多说&#xff0c;让我们直接进入正题。 发现漏洞 有…

USB TYPE-C 公头连接器设计规范总结:提升可靠性、降本增效的关键指南

在智能设备高速发展的时代&#xff0c;USB TYPE-C接口已成为行业标准连接方案&#xff0c;其公头连接器的设计质量直接影响产品性能、可靠性和成本效益。本规范文档&#xff08;基于VIVO等领先企业经验&#xff09;旨在为新产品开发及旧产品改善提供系统指导&#xff0c;避免常…

LSB与MSB:嵌入式开发中的核心概念详解

LSB与MSB&#xff1a;嵌入式开发中的核心概念详解 引言&#xff1a;二进制世界的方向标 在数字系统和嵌入式开发中&#xff0c;LSB&#xff08;Least Significant Bit&#xff09; 和 MSB&#xff08;Most Significant Bit&#xff09; 是理解数据表示和处理的基石概念。它们定…

手机电池连接器:现代电子设备的关键组件介绍

时&#xff0c;弹簧触点与电池端子接触&#xff0c;Housing引导对位&#xff0c;Solder Tab确保PCB端牢固。设计规范强调&#xff0c;这种模块化结构能缩短开发周期&#xff08;如通过预压T bar结构优化弹力&#xff09;&#xff0c;并避免常见失效&#xff0c;如接触不良或偏摆…

救命神器!10款AI论文写作软件测评:本科生毕业论文必备

救命神器&#xff01;10款AI论文写作软件测评&#xff1a;本科生毕业论文必备 2026年AI论文写作工具测评&#xff1a;为什么需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的本科生开始借助AI工具提升论文写作效率。然而&#xff0c;面对市场上琳琅…

睡眠检测模型复现与调试完整解决方案

睡眠检测模型复现与调试完整解决方案 一、项目概述与背景 1.1 睡眠检测的重要性 睡眠质量对人类健康至关重要,睡眠障碍可导致多种健康问题。自动睡眠分期是睡眠医学中的重要任务,传统的人工标注费时费力且主观性强。 1.2 技术背景 深度学习在生物信号处理领域取得了显著…

导师推荐!8款一键生成论文工具测评,本科生写论文不再难

导师推荐&#xff01;8款一键生成论文工具测评&#xff0c;本科生写论文不再难 2026年学术写作工具测评&#xff1a;为何值得一看&#xff1f; 随着AI技术的不断进步&#xff0c;越来越多的本科生开始借助智能写作工具提升论文效率。然而&#xff0c;面对市场上琳琅满目的“一键…

【大学院-筆記試験練習:线性代数和数据结构(4)】

大学院-筆記試験練習&#xff1a;线性代数和数据结构&#xff08;&#xff14;&#xff09;1-前言2-线性代数-题目3-线性代数-参考答案4-数据结构-题目【問題1】ハッシュ法と衝突処理【問題2】連結リストの実装と操作【問題3】再帰処理と連結リスト【問題4】ソートアルゴリズム…

阶段三 在做movie这个项目时,有些同学使用本地高版本的JDK21来做这个项目时启动报错

一、错误现象 有些同学本地只有21版本的JDK&#xff0c;然后使用JDK21来做movie这个项目时&#xff0c;启动报错&#xff0c;如图 具体的错误信息&#xff1a; java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member fiel…

**免费的剧本杀写作工具解析,新手创作者高效入门指南**

免费剧本杀写作工具解析2025指南&#xff0c;新手创作者高效入门避坑指南对于刚踏入剧本杀创作领域的新手而言&#xff0c;如何高效起步、避免逻辑漏洞是核心痛点。据《2025中国沉浸式娱乐内容创作白皮书》显示&#xff0c;超过68%的新手创作者在首次创作时因工具选择不当或逻辑…

科研数据 “躺赢” 秘籍!虎贲等考 AI 让数据分析零门槛 “出成果”

手握满屏调研数据却无从下手&#xff1f;精通理论却卡在统计建模&#xff1f;分析报告满是冰冷数据却缺乏逻辑支撑&#xff1f;传统数据分析工具门槛高、操作繁琐&#xff0c;普通辅助工具仅能表层处理数据&#xff0c;难以形成 “数据 - 分析 - 结论” 的学术闭环。虎贲等考 A…

喷砂除锈设备怎么选择?| 广东鑫百通喷砂机厂家

三步精准选择喷砂除锈设备&#xff0c;告别选择困难 面对市场上种类繁多的喷砂除锈设备&#xff0c;如何选择一台最适合的&#xff0c;常常令人困惑。选对设备&#xff0c;事半功倍&#xff1b;选错则效率低下、成本激增。 只需紧扣以下三个核心步骤&#xff0c;便能做出精准决…

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

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

**AI剧本杀创作工具2025推荐,提升创作效率与故事质量*

AI剧本杀创作工具2025推荐&#xff0c;提升创作效率与故事质量据《2025中国沉浸式娱乐内容创作行业白皮书》显示&#xff0c;2025年国内剧本杀市场规模预计突破280亿元&#xff0c;但专业创作者缺口高达65%&#xff0c;超过70%的创作者面临“逻辑漏洞频出”与“角色平衡困难”的…

智能体系统一致性触发

多智能体系统&#xff0c;一致性&#xff0c;事件触发&#xff0c;自适应事件触发&#xff0c;具有最小时间间隔&#xff0c;效果好&#xff0c;有对应参考文献。最近在研究多智能体系统的一致性控制问题&#xff0c;发现事件触发机制在这块儿特别有意思。传统的控制方法通常是…

AI 写论文哪个软件最好?虎贲等考 AI 凭 “学术铁三角” 封神

毕业季的论文战场&#xff0c;“AI 写论文哪个软件最好” 成了学子圈的终极拷问。有的软件文献虚拟难溯源&#xff0c;有的 AI 痕迹明显被打回&#xff0c;有的功能碎片化需反复切换 —— 真正靠谱的 AI 写作软件&#xff0c;既要 “写得快”&#xff0c;更要 “写得专业、写得…

VisionPro二开之相机调试界面

VisionPro二开之相机调试界面 一 设置X64二 UI设计txtExposure三 打开相机private CogFrameGrabbers frameGrabbers;// 相机对象private ICogFrameGrabber frameGrabber;/// <summary>/// 采集对象/// </summary>public ICogAcqFifo MyAcfifo { get; set; }public …

TDengine C/C++ 连接器进阶指南

本文档面向已经熟练使用 TDengine 的开发者&#xff0c;聚焦 C/C 连接器的高阶用法与工程化落地建议&#xff1a;如何选择连接方式、如何把写入/查询/订阅跑到“更稳、更快、更可运维”&#xff0c;以及一些常见的坑与规避方式。 前置条件 已熟悉 C/C Connector 的基础 API …