论文

重新编译是不够的:测试引导的反编译-C 修复

Recompilation Is Not Enough: Test-Guided Decompiled-C Repair

摘要

反编译的 C 通常只有在修复后才能重新编译,但单独重新编译并不能建立测试观察到的行为。重新编译的命令行二进制文件仍然可以错误地解析选项、打印不同的字节或返回不同的退出状态。我们提出了一个使用编译器反馈和相关官方测试来修复反编译 C 的几个步骤工作流程。编译器和链接器诊断首先指导构建修复。一旦修复后的 C 重新编译成二进制文件,冒烟检查和相关官方测试就会暴露语义修复的行为差异。在对具有可用反编译器导出和确定性精确输出烟雾比较的 104 个 Coreutils 9.5 二进制文件进行的初步静态丰富评估中,91 个二进制文件 (87.5%) 重新编译并通过了测试门; 9 没有在修复预算内重新编译,4 重新编译但仍然无法通过测试门。结果表明,测试门反馈可以使反编译 C 的 LLM 辅助修复比仅编译恢复更可审核。