← 最新论文
💻 computer science

CLIR: Liveness-Driven and Structure-Aware Fuzzing for the Cranelift Compiler

本文提出了 CLIR,一种针对 Cranelift 编译器的创新微分测试框架,该框架结合了保持语法的层次化生成、活跃度引导的指令细化以及跨架构自适应,以克服独特的 SSA 和密度挑战,最终在多种架构上检测到比现有最先进工具显著更多的缺陷。

原作者: Shangtong Cao, Tianlei Song, Qiuping Yi, Tianyu Chen, Guoai Xu, Ningyu He, Haoyu Wang

发布于 2026-06-26
📖 1 分钟阅读☕ 轻松阅读

原作者: Shangtong Cao, Tianlei Song, Qiuping Yi, Tianyu Chen, Guoai Xu, Ningyu He, Haoyu Wang

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,将编译器视为一个极其严苛的翻译官。它的工作是将人用语言(如 Rust 或 C)编写的复杂故事,完美地翻译成特定机器人(如计算机芯片)能够理解的语言。如果翻译官犯了错,机器人可能会崩溃、运行缓慢,或者做出危险的行为。

Cranelift 是 Rust 编程语言使用的一种全新的、非常快速的翻译工具。由于它很新,并且支持许多不同类型的机器人(芯片),本文的作者们想要确保它没有任何隐藏的漏洞(Bug)。

以下是他们如何实现的,用简单的语言进行了解释:

问题所在:为什么测试如此困难

测试一个翻译官非常棘手,主要有三个原因,作者称之为“三大头痛点”:

  1. 语法警察 (SSA 约束): Cranelift 说的是一种非常严苛的方言。每个变量必须在被使用前先被定义,且规则极其死板。如果你写的句子哪怕只违反了一个微小的规则,翻译官会立即拒绝它。大多数测试工具都太笨拙了,无法写出符合这些严格规则的句子。
  2. “Hello World”问题: 即便你写了一个语法正确的句子,它也可能过于简单。如果你只是说“把 1 和 2 相加”,翻译官可能会跳过大脑中的复杂部分。为了寻找漏洞,你需要写出极其密集且复杂的句子,迫使翻译官动用大脑的每一个部分。
  3. 多机器人困境: Cranelift 为四种不同类型的机器人(x86, ARM, RISC-V, 和 s390x)进行翻译。一个对某个机器人有效的句子,对另一个机器人来说可能毫无意义。很难写出一个能同时检查所有机器人而不产生混乱的测试。

解决方案:CLIR(智能翻译器测试器)

作者构建了一个名为 CLIR 的工具。你可以将 CLIR 视为一位大师级建筑师,它通过三个步骤来构建测试用例:

1. 构建骨架(结构感知)

CLIR 并不是随机堆砌词汇,而是从一个蓝图开始。它观察现实世界的程序(如流行的应用程序和网站),并窃取它们的“骨架”——即它们循环、分支和调用函数的方式。

  • 类比: 想象建造一座房子。CLIR 不是随机堆叠砖块,而是观察真实的房屋,复制它们的平面图,然后基于这个坚实的根基建造一座新房子。这确保了“语法”永远是完美的。

2. 注入生命(生命力驱动)

一旦骨架建成,CLIR 就会用指令填充它。但它不仅仅是随机填充。它使用一个“生命力(Liveness)”指南。

  • 类比: 想象一条工厂装配线。如果一名工人制造了一个零件,然后立即把它扔进垃圾桶,那么检查员(编译器)可能会忽略这个零件。CLIR 确保制造出的每个部分都会立即被下一个工人使用。它将指令紧密地联系在一起,使得编译器无法丢弃任何东西。这迫使编译器必须真正执行工作,从而揭示那些通常隐藏在垃圾堆里的漏洞。

3. 侦探(诊断引导)

当 CLIR 发现漏洞时,它不会仅仅大喊“错误!”它表现得像一名侦探。

  • 类比: 如果一辆汽车坏了,普通的测试者可能只会说“车坏了”。CLIR 则像是一名技师,他会说:“不是整辆车的问题,而是第 3 号气缸的火花塞出了问题。”它会自动将问题从整个程序缩小到特定的代码块,最后定位到导致崩溃的单个指令。它还会针对每种特定的机器人(芯片)调整测试,以确保测试的内容是正确的。

结果:效果如何?

作者对 CLIR 进行了 72 小时的对比测试。结果如下:

  • 漏洞猎人: CLIR 发现了 24 个独特的漏洞
    • 官方工具 (cranelift-fuzzgen) 只发现了 3 个。
    • 专为 WebAssembly 设计的工具 (wasm-smith) 只发现了 1 个。
    • 专为 Rust 设计的工具 (RustSmith) 发现的漏洞为
    • 简而言之: CLIR 发现的漏洞数量是竞争对手的 8 到 24 倍
  • 覆盖率: CLIR 运行了 75% 的编译器代码,而其他工具只能达到大约 50-60%。
  • 实际影响: 在发现的 24 个漏洞中,21 个得到了 Cranelift 开发者的确认,其中 9 个已经得到了修复。

总结

本文声称,通过对结构(遵循严格的语法规则)和生命力(确保每条指令都有意义)的智能化处理,CLIR 是比现有方法更好的测试工具。它成功地在其他工具错过的现代编译器中找到了深层、隐藏的漏洞,证明了测试复杂软件系统时,你需要一种专门的、“结构感知型”的方法。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →