# RetroWrite：为模糊测试与内存检测静态插桩商用现成二进制

> RetroWrite 通过生成可重汇编的汇编代码，对 64 位位置无关的 Linux 二进制进行静态改写，从而像在编译时一样插入插桩代码。它不依赖启发式规则，而是依据二进制自身的元数据进行符号化：控制流操作数、位置无关代码必须使用的 PC 相对寻址以及数据重定位均被转换为汇编标签，从而区分引用与标量。作者在此基础上实现了 AFL 覆盖率插桩和仅针对二进制的 AddressSanitizer。他们报告其模糊测试吞吐量与编译器插桩相当，比 AFL 的 QEMU 模式快 4.5 倍，并在 LAVA-M 上发现更多缺陷；在 SPEC CPU2006 上，二进制 ASan 比 Valgrind memcheck 快 3 倍，并在作者的评测中多检测出 80% 的缺陷，其检测覆盖率测试采用 Juliet 内存破坏用例。

- 作者：Sushant Dinesh; Nathan Burow; Dongyan Xu; Mathias Payer
- 原标题：RetroWrite: Statically Instrumenting COTS Binaries for Fuzzing and Sanitization
- 发表载体：IEEE S&P 2020
- 发表状态：会议论文
- 出版／提交日期：2020 年 5 月
- 日期依据：IEEE 提交的 Crossref 元数据及 IEEE Xplore 记录只给出出版日期 2020 年 5 月。Xplore 另记载该文于 2020 年 7 月 30 日收录，本条目不据 5 月 18—21 日的研讨会日期推定具体日期。
- DOI：10.1109/SP40000.2020.00009
- 来源复核于：2026-10-19
- 收录于：2026-10-30
- 原始论文：<https://ieeexplore.ieee.org/document/9152762>
- PDF：<https://hexhive.epfl.ch/publications/files/20Oakland.pdf>
- 代码：<https://github.com/HexHive/retrowrite>
- BibTeX：<https://awesomerea.org/papers/citations/paper-retrowrite.bib>
- 目录页面：<https://awesomerea.org/zh/papers/paper-retrowrite/>
- 记录 JSON：<https://awesomerea.org/papers/paper-retrowrite/record.json>
- 英文版：[English](https://awesomerea.org/papers/paper-retrowrite/index.md)

## 研究范围与局限

该方法依赖位置无关代码；论文的实现面向 Linux x86-64，并借助符号表确定函数起点与大小，因此去除符号的二进制需要由其他工具提供函数边界。由于未对 DWARF 栈展开信息进行符号化，它无法安全改写含异常处理的 C++ 二进制，也不处理混淆或对抗性二进制。二进制 ASan 对栈只按栈帧粒度插桩，也不在全局变量周围添加红区，因此会遗漏部分编译器 ASan 能发现的溢出，且仍慢于编译器 ASan。这些结果基于 2019—2020 年的工具版本和作者的基准。仓库中后来加入的 aarch64 改写器在另一篇学位论文中描述，采用不同的算法，论文中的 x86-64 结果不适用于它。

## 与本合集的关联

补充基于可重汇编汇编代码的静态二进制改写研究：重建符号化的汇编代码，从而在没有源码的情况下插入新代码，与合集中的反编译及二进制恢复研究互补。

## 发表与复核说明

Crossref 给出四位作者顺序、页码 1497–1511 及 2020 年 5 月；IEEE Xplore 的实时页面返回机器人验证，因此通过 Wayback Machine 存档阅读，其页码与月份相同，并记载 2020 年 7 月 30 日收录。HexHive 托管的 15 页 PDF 与仓库 README 所链接的 nebelwelt.net 副本逐字节相同；该副本没有 IEEE 页码，作为作者托管副本使用。论文给出 github.com/HexHive/retrowrite，并称其结果可借助仓库的 Docker 镜像复现。在所审阅的 2025-04-26 提交中，仓库包含 MIT LICENSE 文件，但 GitHub 未识别出许可证；README 列出 Python 3.6 以及 pyelftools 与 capstone。其功能表将去除符号的二进制、非 PIE 二进制与 C++ 标为 x64 改写器尚不支持，并为 aarch64 版本指向另一篇学位论文。

## 一手来源

1. <https://ieeexplore.ieee.org/document/9152762>
2. <https://api.crossref.org/works/10.1109/SP40000.2020.00009>
3. <https://web.archive.org/web/20220803033228/https://ieeexplore.ieee.org/document/9152762>
4. <https://hexhive.epfl.ch/publications/files/20Oakland.pdf>
5. <https://nebelwelt.net/publications/files/20Oakland.pdf>
6. <https://github.com/HexHive/retrowrite/blob/3b1e366ff8d2449a4f4c3157dd95c6f39c0a310b/README.md>
7. <https://github.com/HexHive/retrowrite/blob/3b1e366ff8d2449a4f4c3157dd95c6f39c0a310b/LICENSE>

## 相关条目

- [RetroWrite 静态二进制改写框架](https://awesomerea.org/zh/resources/retrowrite/index.md) · 精选资源

## 关于此条目

已依据论文及一手来源复核。请通过原始论文或 BibTeX 引用原作者。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
