2020 · 会议论文

我们走了多远:C 反编译器反编译正确性测试

How far we have come: testing decompilation correctness of C decompilers

测试 C 反编译器能否保持程序行为。作者的 DecFuzzer 编译由 Csmith 生成的程序,反编译所得可执行文件,在源码中用反编译出的函数替换原函数后重新编译,并比较两个程序的输出;随后通过模输入等价(EMI)变异,从种子程序派生更多测试程序。作者在四种常用反编译器上报告了 1,423 个触发反编译错误的输入,并经人工分析在两个开源反编译器中确认 13 个缺陷。他们认为现代反编译器在功能正确性上取得了切实进展,但类型恢复与优化仍妨碍其输出准确的代码。

研究范围与局限

测试使用规模较小的生成程序,而非真实二进制;重新编译失败与行为不一致分开记录。在作者的产物中,测试程序以 GCC 在 -O0 下编译为 32 位 x86 代码,Csmith 被限制为生成单个函数,且不含数组、结构体、联合体、指针或 long long 类型,因此优化代码和更丰富的数据类型不在该配置范围内。四种反编译器(IDA Pro、JEB3、RetDec 及 Radare2 的 r2ghidra 插件)均按 2020 年时的版本测试;错误数量与缺陷针对这些版本,而非当前版本。IDA Pro 与 JEB3 属商业软件,未包含在产物中,产物只配置了 RetDec 与 r2ghidra。

与本合集的关联

补充借助重新编译对反编译器正确性开展差分测试的研究,与 DecompileBench 等在真实函数上评估输出的反编译基准互补。

发表与复核详情

发表载体
ACM ISSTA 2020
发表状态
会议论文
出版/提交日期
2020 年 7 月 18 日
日期依据
ACM 提交的 Crossref 元数据将纸质与在线出版日期均记为 2020-07-18,ACM 论文页面给出的出版日期相同。本条目采用该日期,而非会议日程。
DOI
10.1145/3395363.3397370

Crossref 与 ACM 页面给出两位作者的顺序、页码 475–487,以及本条目采用的小写标题;会议日程页与产物 README 将其写作“How Far We Have Come: Testing Decompilation Correctness of C Decompilers”。审阅期间 dl.acm.org 拒绝自动请求,也未找到论文正文的其他副本,因此上述方法与结果依据 ISSTA 2020 日程页上的摘要、Wayback Machine 存档的 ACM 页面(摘要、参考文献列表及“Artifacts Evaluated – Functional”徽章)以及产物本身;仅见于论文正文的细节(如各反编译器的结果)未予记录。论文参考文献 [9] 链接 monkbai/DecFuzzer。所审阅的 2020-04-23 提交是 ISSTA’20 产物评审包:面向 Ubuntu 18.04,EMI 变异需要 MySQL,还需预编译的 RetDec v4.0 以及带 r2ghidra 的 Radare2,并在 Dropbox 上提供种子与结果数据的链接。仓库没有许可证文件,GitHub 也未识别出许可证,因此本条目不注明许可证。本次未安装或运行任何内容。

来源复核于

本合集仅做来源复核,未重新运行论文实验。请通过原始论文或 BibTeX 引用原作者。

报告条目过时 建议修正翻译

一手来源

  1. https://dl.acm.org/doi/10.1145/3395363.3397370
  2. https://api.crossref.org/works/10.1145/3395363.3397370
  3. https://web.archive.org/web/20251215175843/https://dl.acm.org/doi/abs/10.1145/3395363.3397370
  4. https://conf.researchr.org/details/issta-2020/issta-2020-papers/26/How-Far-We-Have-Come-Testing-Decompilation-Correctness-of-C-Decompilers
  5. README.md GitHub · monkbai/DecFuzzer · 修订 8e109c1
  6. src/Config.py GitHub · monkbai/DecFuzzer · 修订 8e109c1