自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

logiciel的专栏

方法决定细节

  • 博客(191)
  • 资源 (1)
  • 收藏
  • 关注

原创 伪代码中貌似张冠李戴的数组指向

这段代码分析揭示了数组访问的边界计算问题。原始伪代码通过复杂的指针运算访问数组元素,经过计算发现实际访问的是v38和v39数组。

2025-11-10 08:38:40 74

原创 Ada与RTOS

摘要:欧美实时系统中,使用Ada语言开发时,可仅依赖其内置任务机制和运行时系统实现并发调度,无需VxWorks等RTOS。Ada的Ravenscar配置支持裸机环境,适用于航空航天等需高可靠性领域。实际应用取决于系统需求——简单/高可靠系统可纯Ada实现(如欧洲航天局项目),复杂系统则需结合RTOS功能。90年代国内重大项目曾就Ada无RTOS方案与C+VxWorks方案展开讨论,最终选择了后者。

2025-11-10 08:22:06 987

原创 甄别伪代码中的数组下标操作

这段代码展示了指针运算优化的过程。原始代码通过复杂计算访问数组元素:使用4496(即300*15-4)来访问v2数组的第15个元素。分析发现这实际上等价于v2->u96[a2-15]操作,其中u96是一个300字节大小的结构数组(索引0-4),偏移量为4。前面对a2-15的范围检查验证了索引安全性。最终将复杂的memcpy调用简化为直观的数组访问形式,提高了代码可读性且保持了相同功能。

2025-10-31 13:23:06 175

原创 精简伪代码中Ada编译器增生的代码

摘要:本文分析了Ada语言变体记录在逆向工程中的处理方式。通过IDA反编译的伪代码展示了变体记录的实现机制,并提出了用C语言联合类型替代的方案。同时讨论了Ada编译器的范围检查机制及其在反编译中的表现,以及如何优化重复检查代码。文章最后指出,在逆向工程中应着重关注原始代码的设计思想,而非编译器生成的辅助代码。

2025-10-31 10:38:41 364

原创 通过综合分析识别一个全局变量的类型

该代码分析揭示了内存中三个连续变量(page_s_vert_rev_ifr__g_rta_params、dword_2A8E994和byte_2A8E998)实际上构成一个结构体数组。通过重构定义了一个包含uint16_t、uint32_t和uint8_t三个成员的结构体rta_params_t,总大小为12字节。该数组包含2个元素,每个元素都会被初始化为{0,0,3}。后续代码展示了如何访问这个结构体数组中的特定元素成员。这种重构使代码更清晰易读,同时保持了原始的内存布局和功能。

2025-10-22 11:36:30 205

原创 甄别伪代码中被“错用”的数组

该文分析了IDA生成的伪代码中的数组访问越界问题。第一段定义了两个数组v12和Src,第二段代码中for循环对v12[i+23]的赋值实际上会访问到Src数组。通过检查汇编代码发现,IDA将对Src数组的循环操作识别为对v12的操作,因为var_24C对应v12[23]。正确的循环应该是对Src数组从下标4开始的赋值操作。

2025-10-21 13:35:38 385

原创 甄别伪代码中的数组

该文分析了IDA生成的函数伪代码,发现存在数组越界风险。原代码将局部变量存储在v16[302]数组中,但通过表达式*(_DWORD*)&v16[2*a2+272]访问时,当a2≥15会导致访问v16[302]以外的内存。重构后,将变量分为两个数组:var_538[5]和var_318[27],其中var_318专门存储原v17-v28变量,并通过索引安全访问。最终优化了函数调用,使用var_318[a2]替代原先的指针运算,避免了潜在的数组越界问题。

2025-10-19 11:00:30 199

原创 把伪代码函数中的某些变量还原为结构变量的分量

该文章描述了对IDA生成的伪代码进行重构的过程。通过自研工具,将原始变量重新定义为结构体成员,如将var_27改为var_28._1。文章详细说明了结构体mmi_server_types__data_fm_command_t及其子结构的定义,包括107号联合体分量。最终展示了准确的C代码。

2025-09-18 17:33:18 231

原创 在VS2022中使用Copilot修改伪代码的初步体验

摘要:本文记录了在VS2022中使用Copilot处理代码修改请求的过程。第一个请求成功修正了var_98的类型,但在函数声明中添加了不应有的static修饰符。第二个请求涉及识别无效的include语句,Copilot最初正确识别出2个无用头文件,但删除后再次验证时却给出错误结果。

2025-08-24 15:03:59 673

原创 从伪代码到C代码

摘要:作者介绍了使用IDA工具进行逆向工程时面临的挑战,特别是将大量伪代码(158万行)转换为C代码的困难。从2011年起,作者开始开发专用工具来辅助这一过程,包括文件拆分、头文件生成、include语句添加等功能。作者认为这种"工具化"的解决方式源于个人思维习惯,希望不要误导读者。

2025-08-19 13:01:20 939

原创 伪代码函数中的变量名称

本文介绍了IDA生成的伪代码中变量命名规则及其对应关系。变量通常以v加数字命名,部分特殊变量如result、Buf等具有特定含义。注释中显示变量对应的寄存器或栈偏移量,有助于判断结构体布局。作者开发了工具将汇编清单中的变量名(如var_偏移量)替换到伪代码中,简化了结构体逆向分析。通过偏移量可识别相邻变量是否属于同一结构体,最终将基本类型变量替换为结构体类型定义,删除冗余分量变量。该方法有效降低了复杂结构体相关代码的逆向分析难度。

2025-08-19 08:47:16 648

原创 甄别伪代码中的常量

摘要:文章分析了IDA9.0生成的两段伪代码,揭示了逆向工程中常见的数据类型识别问题。第一段代码误将字符串当作数组访问,实际应识别为0xCC2B20处的59个DWORD数组;第二段代码误将整型变量当作数组指针,实际应识别为0xCC2948处的12个WORD数组。通过分析内存地址和汇编指令,文章展示了如何正确识别这些隐藏的数据结构,并给出了修正后的伪代码,为逆向工程中的数据类型识别提供了参考案例。

2025-08-13 11:09:51 818

原创 伪代码中的操作内存函数

本文分析了IDA伪代码中的memcpy和memset操作,指出直接使用固定字节数存在移植问题。作者建议将第三个参数改为sizeof(变量/类型)形式,确保代码适应性。通过两个实例说明:当复制结构体数组时,需正确定义结构体类型并使用sizeof;对于结构体复制,可直接改为赋值语句以提高可读性。

2025-08-13 09:30:33 711

原创 甄别伪代码中的变量

摘要:分析IDA9.0生成的伪代码发现,aFix0Fix1Fix2Fi[50](值为0)和unk_CDF1BF(值为1)构成了结构体数组的下标范围。由于这两个变量在内存中相邻(地址00CDF1BE和00CDF1BF),建议将其定义为unsigned char G_CDF1BE[2]={0,1}。修改后的伪代码通过G_CDF1BE数组清晰地表示了循环的起始和终止条件,解决了原代码中字符串结尾与数组下标混淆的问题,更准确地反映了程序逻辑。

2025-07-31 08:49:27 145

原创 占位符变量savedregs分析实例

摘要:IDA反编译生成的伪代码中的"savedregs"变量通常表示保存的寄存器值,其特殊之处在于它标记了栈帧中寄存器保存的位置。通过计算内存偏移量可确定其对应的真实变量。例如在案例中,通过分析偏移量发现"savedregs"实际上指向一个结构体中的特定字段,最终将伪代码语句转换为更易读的形式。这种方法可有效解决IDA伪代码中"savedregs"变量的解析问题,使其对应到程序实际的变量或数据结构上。

2025-07-31 08:39:32 234

原创 具有out模式参数的Ada函数或过程的逆向分析

本文分析了IDA生成的伪代码与汇编代码的差异,重点讨论了函数返回值处理问题。在伪代码中,函数a424__legs__ci__set_ci只返回eax值,而汇编代码显示它还通过edx返回了第二个值。这导致伪代码中v14变量未被初始化。研究建议修改伪代码以包含edx返回值,并推测原始Ada代码可能使用了out模式参数。这种分析有助于理解编译器如何处理多返回值情况,以及如何正确逆向工程此类函数调用。

2025-07-28 17:35:17 856

原创 结构体字节型分量的反编译

摘要:分析IDA不同版本对结构体代码的反编译差异。经确认,该变量应为包含_0、_1等字节成员的结构体。

2025-07-25 08:44:50 751

原创 IDA对case语句的处理

摘要:本文分析了Ada语言case语句在编译后的实现机制。通过逆向分析发现,IDA生成的伪代码会重新排序case分支,而实际汇编代码通过跳转表(jumptable)实现分支选择,与源代码顺序无关。研究显示,Ada编译器会生成额外的范围检查代码,而IDA会智能地优化掉冗余检查。对比两个示例发现,尽管源代码和伪代码的case顺序不同,但底层实现均采用跳转表机制,因此IDA按数值排序case的做法是可接受的。该研究揭示了编译器对case语句的实现细节与反编译工具的处理策略。

2025-06-23 10:34:46 669

原创 银河麒麟中gedit启动后一个报错的解决

银河麒麟中gedit启动后一个报错的解决

2025-06-23 09:56:33 370

原创 恢复被IDA更改的代码

恢复被IDA更改的代码

2025-06-22 08:12:32 933

原创 IDA把一个结构变量翻译为函数指针

把IDA生成的函数指针改为结构变量

2025-06-20 16:51:11 937

原创 GJB438C-2021《软件需求规格说明》的一处修订

GJB438C-2021附录J《软件需求规格说明》的一处修订。

2024-10-22 20:26:21 3990

原创 ndb9300public-ndb2excel简介

关于发布机载导航数据库的工具ndb2excel的说明。

2024-09-30 17:38:20 577

原创 飞机导航数据库资料

从网上收集的飞机导航数据库的一些资料。

2024-09-27 11:40:27 540

原创 PSS-sdy_opengl_sdd

PSS-sdy_opengl_sdd的源码发布简介。

2024-09-27 04:59:05 506

原创 一段未能看懂的代码

一段未能看懂的代码。

2024-09-22 08:00:42 272

原创 IDA擅自合并代码一例

IDA有时会擅自合并代码,导致与原始设计不符。

2024-09-09 15:01:48 310

原创 处理数组下标的代码

对处理数组下标的汇编代码的初步分析

2024-08-22 20:50:36 281

原创 汇编代码翻译为abs函数的调用

把一段汇编代码翻译为对函数abs的调用。

2024-08-13 13:16:30 371

原创 Markdown 中图片文件的后缀名

Markdown 中图片文件的后缀名要完全保持原样。

2024-07-25 14:19:19 168

原创 代码走查的一个实例

代码走查取得效果的一个实例。

2024-06-21 12:00:05 472

原创 Ada判别式记录的效率问题

如果Ada判别式记录使用不当,将产生额外时空开销。

2024-06-21 09:18:35 278

原创 从木匠到编程匠的传承

一点感想。

2024-05-11 09:17:31 322

原创 用Github+HUGO搭建博客的经验教训

用Github+HUGO搭建博客的经验教训。

2024-05-11 09:07:57 486

原创 Splint的移植

移植C程序静态检查工具Splint。

2024-05-10 08:19:29 345

原创 关于ARINC653的疑问

关于ARINC653的一些疑问。

2024-05-10 08:11:22 641

原创 请问如何用busctl命令列出会话总线?

请问,如何用busctl命令列出会话总线?

2024-03-01 10:29:32 552

原创 dbus-sensors与libgpiod

目前的debus-sensors只能用libgpiod-1.6.3,不能用其它版本。

2024-03-01 10:21:22 796

原创 OpenBMC的c++代码中的变量初始化问题(二)

解决在构建openbmc/intel-ipmi-oem的x64可执行模块中遇到的变量初始化问题(二)。

2024-02-24 15:54:53 1351

原创 OpenBMC的c++代码中的变量初始化问题(一)

解决在构建openbmc/intel-ipmi-oem的x64可执行模块中遇到的变量初始化问题(一)。

2024-02-24 15:42:01 754

DO-178B英法中三种文本对照学习注记

本文汇总了对英文版DO-178B、法文版ED-12B和中文版HB/Z295-96进行对照学习时所做的注记。

2011-04-08

DO-178B中译文商榷

通过批注方式表达对中译文的修改意见

2023-04-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除