摘要
arXiv:2505.04852v2 宣告类型: 替换-交叉
摘要:由于 Rust 提供了强大的内存和线程安全保证,对 C 代码进行翻译的兴趣不断增加。工具如 C2RUST 使从 C 到语义等价的 Rust 代码的语法引导重构成为可能。然而,生成的 Rust 程序往往依赖于不安全的构造——特别是原始指针——这削弱了 Rust 的安全性保证。本文旨在通过消除原始指针来提高由 C2RUST 生成的 Rust 程序的内存安全性。具体来说,我们提出了一种窗口内原始指针重写技术,将个体函数中的原始指针提升为合适的 Rust 数据结构。技术上,PR2 使用基于决策树的提示来引导指针提升过程。此外,它利用代码更改分析来引导在重构过程中引入的错误的修复,有效解决了编译和测试用例执行期间遇到的错误。我们实现 PR2 作为原型,并使用 gpt-4o-mini 对 28 个真实世界的 C 项目进行了评估。结果显示,PR2 成功消除了这些项目中 13.22% 的局部原始指针,大幅提升了翻译后的 Rust 代码的安全性。平均而言,PR2 完成一个项目的转换需要 5.44 小时,平均成本为 $1.46。