使用 LLM 保障 C 程序的内存安全
软件工程
2024-04-02 v1 编程语言
摘要
以 C 语言编写的低级代码中的内存安全违规仍然是软件漏洞的主要来源之一。通过构造消除此类违规的一种方法是将 C 代码移植到安全的 C 方言。此类方言依赖程序员提供的标注来保证安全性,且运行时开销最小。然而,这种移植是一个手动过程,给程序员带来了沉重的负担,因此该技术的采用率有限。移植任务不仅需要推断标注,还可能需要重构或重写代码以使其适应此类标注。在本文中,我们使用大型语言模型(LLM)来解决这两个问题。我们展示了如何利用 LLM 的能力进行复杂的代码推理以及大型代码库的重写。我们还提出了一个用于全程序转换的新颖框架,该框架利用轻量级静态分析将转换分解为可由 LLM 有效执行的较小步骤。我们在一个名为 MSA 的工具中实现了我们的想法,该工具以 CheckedC 方言为目标。我们在多个微基准测试以及多达 2 万行代码的真实代码上评估了 MSA。我们展示了优于普通 LLM 基线的卓越性能,并展示了对最先进符号(非 LLM)技术的改进。
引用
@article{arxiv.2404.01096,
title = {Enabling Memory Safety of C Programs using LLMs},
author = {Nausheen Mohammed and Akash Lal and Aseem Rastogi and Subhajit Roy and Rahul Sharma},
journal= {arXiv preprint arXiv:2404.01096},
year = {2024}
}