摘要
arXiv:2505.04852v1 类型: cross
摘要: 由于 Rust 的健壮的内存和线程安全保证,将 C 代码翻译成 Rust 代码的兴趣日益增长。诸如 C2RUST 这样的工具能够从 C 代码生成与之语义等效的 Rust 代码。然而,生成的 Rust 程序常常依赖于不安全的构造,特别是原始指针,这削弱了 Rust 的安全性保证。本文旨在通过消除原始指针来提高由 C2RUST 生成的 Rust 程序的内存安全性。具体来说,我们提出了一种窗口级原始指针重写技术,将各个函数中的原始指针提升为合适的 Rust 数据结构。从技术上讲,PR2 使用基于决策树的提示来引导指针提升过程。此外,它利用代码变更分析来指导转换过程中引入的错误修复,从而有效地解决了编译和测试执行期间遇到的错误。我们构建了 PR2 的原型,并使用 gpt-4o-mini 对 28 个真实世界的 C 项目进行了评估。结果显示,PR2 成功地在这些项目中消除了 13.22% 的局部原始指针,显著增强了翻译后的 Rust 代码的安全性。平均而言,PR2 完成一个项目的转换需要 5.44 小时,平均成本为 1.46 美元。