谷歌借助 AI 与差分模糊测试将 C 语言依赖库改写为 Rust

谷歌通过融合Gemini与差分模糊测试,成功将C语言图像处理库GIFlib改写为内存安全的Rust等价代码,有效消除遗留内存漏洞。项目以约3000行的GIFlib为核心改造对象,运用三阶段自动化迁移流程,在保留原有逻辑与延迟的基础上,通过ABI兼容封装实现安全替换,并在CVE-2026-26740漏洞披露前修复关键堆写入零日漏洞。由于内存损坏漏洞在成熟代码栈中占比约70%,该方案为消除高危害漏洞提供了可靠路径。验证过程中,团队对超3000万GIF文件进行大规模回归测试,并结合对抗性评估捕捉潜在差异,证实AI迁移在功能一致性上表现稳定。预发布阶段中,外部研究者发现的漏洞在Rust替代版本生产环境中未受影响,凸显架构级语言迁移对预防漏洞的前置性。在此背景下,尽管Rust性能与C语言持平,去除了进程隔离开销后P99尾部延迟下降,但AI转译仍需持续维护适配,且安全边界完善与人工审计工作量仍不可忽视。

--91likeyou---

为了避免跨 C 语言边界传递指针时产生未定义行为,FFI 封装层会从裸指针重建安全的 Rust 句柄:

#[no_mangle]pub unsafe extern "C" fn DGifCloseFile( gif_file: *mut GifFileType, error_code: *mut c_int,) -> c_int { if gif_file.is_null() { return GIF_ERROR; } let mut handle = Box::from_raw(gif_file as *mut GifFilePrivate); match handle.close() { Ok(_) => GIF_OK, Err(e) => { if !error_code.is_null() { *error_code = e.to_raw(); } GIF_ERROR } }}复制代码

将自动生成的代码部署到核心业务基础设施,必须证明它和原 C 语言实现的语义完全等价。团队搭建了一个验证流水线,对超过 3000 万个真实的 GIF 文件进行大规模回归解码测试,确保逐比特渲染结果的一致性。

与此同时,一个自动化差异模糊测试器连续六天对两个运行时进行并排迭代,累计执行 2 亿次迭代没有发现功能漂移。测试套件还加入了对抗性 LLM 评估提示词,用于分析两个代码仓库,寻找潜在的行为分歧。该验证流水线在 LZW 解压器中发现了一个未处理的边缘情况,并标记出一个内部遗留的越界写入漏洞——该问题由早期原始 C 源码的一个内部补丁引入。

该项目最有力的验证出现在预发布阶段。一位外部安全研究人员在上游 giflib 中发现了一个越界堆写入漏洞,后被编目为 CVE-2026-26740。在漏洞公开披露前,谷歌这套 Rust 替代版本的生产节点从底层就不受该漏洞影响,这表明架构级的语言迁移能够从根本上预先杜绝一整类漏洞。

用 Rust 替换 C 语言库时,人们常常担心强制边界检查会带来运行时开销。全球图像解码集群的生产监控数据表明,Rust 二进制程序和原版 C 语言程序运行性能持平。而且,内存安全保障直接被移入类型系统,平台工程师因此可以移除之前为隔离图像解码任务而设置的传统操作系统沙箱。去掉这层进程隔离边界后,P99 尾部延迟显著降低。

尽管性能有所提升,作者也指出:AI 代码翻译并非可以完全放手不管的灵丹妙药。每当上游发布新功能或架构改动时,将上游 C 语言依赖分叉成 Rust 库都会带来持续的维护分叉。此外,外部函数接口封装仍然需要领域专家介入,防止生命周期泄漏,保证线程安全约束不被破坏。

r/rust 和 Hacker News 上的相关讨论普遍认可这一成果,同时也在争论 AI 辅助移植的实用性与安全性:评论者称赞了谷歌严谨的差异模糊测试框架——它捕捉到了谷歌自家遗留 C 语言补丁中的一个既有的越界写入漏洞——但大家对“一次性直接翻译”方案提出很多质疑,指出人工审计细微语义退化、修复不安全的 C FFI 边界所需要的工作量往往远超代码生成本身。许多人认为,如果代码库的规模超出 giflib 这类简单、自包含的项目,采用确定性转译器(如 c2rust),再借助 AI 重构为安全、地道的 Rust 代码,会更加可靠。

谷歌已经把生成的库开源,项目名叫 giflib-rs,供那些考虑对基础工具做自动语言迁移的团队作为参考实现。

查看英文原文:

🔥 热词:#谷歌将开展首次太空ai算力在轨测试 · #谷歌AI语言工具对比 · #谷歌开始测试新版AI搜索模型 · #谷歌将推出AI聊天机器人功能 · #苹果或将引入谷歌AI技术 · #谷歌AI模型和OpenAI模型区别 · #谷歌为AI摘要功能向出版商付费 · #谷歌为何开放最强AI模型