← 最新论文
💻 computer science

GapForge: Directed Compiler Fuzzing via Coverage-Gap Analysis

GapForge 是一种针对性的基于大语言模型的编译器模糊测试技术,它通过优先考虑覆盖率不足的文件、通过路径差异分析推断细粒度的触发需求,并迭代地合成提示词,从而系统地识别并填补长尾覆盖率缺口,在 GCC 和 LLVM 上的覆盖率和漏洞发现方面显著优于现有方法。

原作者: Mingxuan Zhu, Qingyuan Liang, Junjie Chen, Zhihong Xue, Dan Hao

发布于 2026-07-20
📖 1 分钟阅读☕ 轻松阅读

原作者: Mingxuan Zhu, Qingyuan Liang, Junjie Chen, Zhihong Xue, Dan Hao

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

想象一下,运行你手机、汽车或互联网的软件就像一座巨大的、隐形的工厂。在这座工厂内部,有数百万个微小的工人(代码行),他们将你的高层指令转化为计算机能理解的机器语言。这座工厂被称为编译器。如果哪怕只有一个工人偷懒、困惑或违反了规则,整个工厂都可能生产出垃圾产品——即崩溃、冻结或在暗中做错事的程序。由于这些工厂如此庞大且复杂,要确保每一个工人都被监视和测试是非常困难的。

于是,进入了软件测试的世界。你可以把它想象成派出一支检查员队伍,来看看工厂是否运转正常。多年来,检查员一直使用两种主要技巧:要么向工厂投掷随机飞镖(随机测试),要么试图通过扭曲现有的指令来破坏事物(变异测试)。但问题在于,检查员总是击中工厂中那些容易触及的角落,而留下那些布满灰尘、黑暗且难以到达的后方房间无人问津。这些“盲点”正是最危险的漏洞(bug)隐藏的地方,它们正等待着制造麻烦。最近,科学家开始使用大语言模型(LLMs)——能够编写代码的超智能人工智能——来协助检查工作。但即使是这些 AI 助手也经常漫无目的地游荡,不知道究竟哪些黑暗角落最需要光照。

这就是名为 GapForge 的新技术发挥作用的地方,它就像一个带着魔法地图的侦探。GapForge 不仅仅是投掷飞镖或靠猜测,它会观察工厂地图,看清哪些房间从未被造访过。然后,它利用自己的 AI 大脑,去推算开启那些锁着的门所需的特定“暗号”(一种特定的代码类型和特殊的设置)。研究人员在世界上两个最大的编译器工厂 GCCLLVM 上测试了它。他们发现 GapForge 是寻找这些隐藏房间的高手。在短短 72 小时内,它覆盖了 68.13% 的 GCC 核心代码和 69.11% 的 LLVM 代码。这听起来可能达不到 100%,但请记住,之前的最佳 AI 方法仅能达到约 64.62%65.02%。GapForge 不仅仅是小幅提升了数字;它还在 GCC 中找到了 24,736 行、在 LLVM 中找到了 19,798 行其他方法完全遗漏的代码。

它是如何做到的呢?把 GapForge 想象成一个三步走的流程。首先,它扫描工厂地图并挑选出“最脏”的房间——即拥有最多未测试代码的那个房间。第二,它不再只是观察整个房间,而是放大到具体的落尘点,并询问 AI:“我们需要什么样的钥匙来打开这里?”AI 会分析周围干净区域的情况,以此来推测达到该点所需的代码结构和工厂设置(比如打开某个特定的开关)的具体组合。第三,如果 AI 尝试了一把钥匙却没起作用,GapForge 会记住这次失败。它会告诉 AI:“不要再试那个了,试试别的,”然后带着更好的计划将它送回。这个循环不断重复,稳步地照亮每一个黑暗的角落。

结果令人印象深刻。GapForge 不仅比其他八种顶尖技术覆盖了更广的范围,还发现了 12 个隐藏在阴影中的真实世界漏洞。其中包括 8 个崩溃(编译器直接放弃并停止运行)和 4 个错误编译(编译器静默地构建了一个看起来完美但实际上已损坏的程序)。研究人员证明,GapForge 过程中的每一个部分都至关重要:如果移除“地图阅读”、“钥匙猜测”或“从失败中学习”,结果都会显著变差。其他方法忙于生成数以千计的测试程序,而 GapForge 生成的程序虽然较少,但却更加聪明,这证明了在软件测试的世界里,质量和方向往往比单纯的数量更重要。

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

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

试用 Digest →