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 引用原作者。
一手来源
- https://dl.acm.org/doi/10.1145/3395363.3397370
- https://api.crossref.org/works/10.1145/3395363.3397370
- https://web.archive.org/web/20251215175843/https://dl.acm.org/doi/abs/10.1145/3395363.3397370
- https://conf.researchr.org/details/issta-2020/issta-2020-papers/26/How-Far-We-Have-Come-Testing-Decompilation-Correctness-of-C-Decompilers
- README.md GitHub · monkbai/DecFuzzer · 修订 8e109c1
- src/Config.py GitHub · monkbai/DecFuzzer · 修订 8e109c1