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

鸿蒙6.1源码编译数据库生成

1. 目标

给openharmony 6.1 release代码生成一个 JSON 文件,为了精准抓取鸿蒙每个源码文件的编译参数与架构上下文,从而让你的自定义 Clang 脚本能够无需实际编译,就能高效、精准地进行离线批量漏洞扫描

2.具体实现

2.1. 确定芯片架构

具体操作:

这里是在我拉取好的源码目录下执行的,其中rk3568是我选择的芯片类型,对应的是arm架构

./build.sh --product-name rk3568 --gn-args is_debug=true --gn-flags="--export-compile-commands"

这一步完成之后会出现~/openharmony_6.1/out/rk3568/build.ninja文件

原理:

Clang AST(抽象语法树)并不是纯粹的文本解析,它是带有语义和目标平台属性的。如果直接脱离芯片架构直接去用默认的 x86_64 去解析鸿蒙代码,会引发以下灾难:

1. 核心类型大小(Sizeof)会完全错乱(致命)

在 C/C++ 中,指针、基础数据类型的大小和内存对齐(Alignment)是强依赖芯片架构的:

  • 数据类型差异:例如long类型,在 32 位 ARM 架构上通常是 4 字节,而在你的 64 位 x86 电脑上是 8 字节。

  • 指针与结构体偏移:当 Clang AST 计算结构体中指针的偏移量(Offset)时,如果架构选错,算出来的内存布局就是错的。这会导致你的指针越界检出算法、空指针分析直接报出大量虚假的错误(误报),或者真正的数据溢出漏洞根本检测不到(漏报)。

2. 条件编译条件错乱,AST 节点大面积缺失

鸿蒙的底层源码中充斥着大量的平台宏隔离:

#ifdef __arm__ // ARM 架构特有的安全指针处理逻辑(你想检测的代码) void* ptr = get_arm_secure_buffer(); #elif defined(__x86_64__) // x86 架构的逻辑 void* ptr = get_x86_buffer(); #endif

如果你不指定对应的芯片架构,Clang 在构建 AST 时会默认走__x86_64__分支,导致真正的鸿蒙 ARM 代码直接被预处理器砍掉,后续进行clang ast分析连代码节点的面都见不到。

2.2 逆向导出只包含 C/C++ 的 compile_commands.json

./prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C ./out/rk3568 -t compdb cxx c > ./out/rk3568/compile_commands.json

这一步完成之后会出现~/openharmony_6.1/out/rk3568/compile_commands.json文件,大小约为2.3G

2.3 常见问题

在2.1结束之后,我有一个报错,打开error.log(在~/openharmony_6.1/out/rk3568/目录下)发现是N 在解析//third_party/libnl/BUILD.gn第 13 行时,调用了一个外部脚本install.sh。这个脚本返回了1(非零退出码),导致整个构建流程在“画图纸”阶段就报错退出了。

解决方法是修复libnl的环境依赖:

sudo apt-get update sudo apt-get install unzip tar patch pkg-config

然后就可以顺利执行2.2了

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

相关文章:

  • NCM格式深度技术解析:5分钟掌握音频解密核心技术
  • 2026年5月25日成都地区包钢产无缝钢管(8163-20#;外径42-630mm)现货报价 - 四川盛世钢联营销中心
  • KMS_VL_ALL_AIO智能激活脚本:告别Windows和Office激活烦恼的完整解决方案
  • 如何在5分钟内掌握BioAge生物年龄计算工具包?
  • week1
  • 200页报告丢给AI,Gemini 3.1 Pro 和 DeepSeek-R2 谁读得更细?
  • PHP扩展开发深度解析:从底层原理到高性能模块实践
  • [开源] 医嘱最小合规改动路径枚举系统:面向临床开方与医保质控的反事实推理工具
  • 2026年北京搬家公司横评:从居民搬家到企业搬迁的解决方案 - 企业名录优选推荐
  • 深入浅出:图解高通Sensor SEE与SSC架构差异,以及如何影响你的调试效率
  • Nintendo Switch大气层系统:深度解析与完整解决方案
  • 揭秘开源电路仿真神器:3大创新功能让电子设计如此简单
  • 2026年国内AI大模型接口代理站深度亲测 诗云API等4大主流平台全维度对比选型指南
  • 如何快速提取Flash资源:JPEXS Free Flash Decompiler完整指南
  • 5月兰州金价回落不少朋友想趁低点入手金饰 优选长悦 - 专业黄金回收
  • 2026 广州新房装修攻略:权威口碑装修公司排名出炉 - GEO排行榜
  • 从药物鉴定到太阳能燃料:手把手教你用Gaussian预测IR、Raman、ECD等7种光谱
  • 2026年北京搬家公司横评:从居民搬迁到企业运营的全链条对标指南 - 企业名录优选推荐
  • 龙之谷启程手游官网下载:龙之谷启程最新官方下载渠道
  • 2026 年5月25日广州上门黄金回收变现,金银传奇、汇鑫阁珠宝商行排名靠前 - 新闻全知道
  • 再造 JVM 侧基础设施:高并发场景下的 Java Agent 企业级实践
  • 23 款别克威朗 PRO 灯光升级|三复眼四透镜透镜,夜驾质感与安全双飞跃 北京头部改装店 - 北京新语
  • 赣州本地黄金回收这六家老店实在靠谱卖金不踩坑 - 专业黄金回收
  • 2026 年 Word 怎么转 TXT?手把手教你 4 种最方便的方法 - AI测评专家
  • 黑龙江省北安市寄件省钱新思路!微信端平价寄件平台盘点,全国寄送省心又划算 - 时讯资讯
  • 上海高复择校核心维度对标:未来路vs苏洵 师资、提分、口碑及管理全解析 - 资讯焦点
  • 植物大战僵尸修改器:PvZ Toolkit如何让你轻松掌控游戏资源?
  • 东莞黄金回收怎么选?福正美免费上门更省心 - 上门黄金回收
  • 靠谱的济宁肖像写真公司
  • 重庆主城区秦师傅空调维修:江北区专业的空调维修公司怎么联系 - LYL仔仔