ENCRUST:在实时支架上进行封装替换和代理优化,以实现安全的 C-to-Rust 翻译
ENCRUST: Encapsulated Substitution and Agentic Refinement on a Live Scaffold for Safe C-to-Rust Translation
摘要
我们在 Live Scaffold 上展示了用于安全 C 到 Rust 转换的封装替换和代理优化,这是一个用于将现实世界的 C 项目转换为安全 Rust 的两阶段管道。现有方法要么产生没有内存安全保证的不安全输出,要么单独翻译函数,无法检测跨单元类型不匹配或处理需要整个程序推理的不安全结构。此外,当类型签名发生变化时,函数级 LLM 管道需要协调调用者更新,而项目规模的系统通常无法在现实世界的依赖复杂性下生成可编译的输出。 Encrust 通过应用程序二进制接口 (ABI) 保留包装器模式将边界适应与功能逻辑解耦,并根据集成代码库验证每个中间状态,从而解决了这些限制。第 1 阶段(封装替换)使用保留 ABI 的包装器来转换每个函数,该包装器将其分为两个组件:一个保留原始原始指针签名的调用者透明填充程序,以及一个由 LLM 定位的安全内部函数,并带有干净的、范围有限的提示。这可以实现独立的每个函数类型更改,并在失败时自动回滚,而无需协调调用者更新。然后,确定性的、类型导向的包装器消除过程会在成功翻译后删除包装器。第 2 阶段(代理细化)使用在基线感知验证门下在整个代码库上运行的 LLM 代理来解决超出每个函数范围的不安全构造,包括静态 mut 全局变量、跳过的包装器对和失败的转换。我们在 7 个 GNU Coreutils 程序和 Laertes 基准测试中的 8 个库上评估了 Encrust,结果显示所有 15 个程序的不安全结构大幅减少,同时保持了完整的测试向量正确性。