# rev.ng：用于恢复控制流图与函数边界的统一二进制分析框架

> rev.ng 借助 QEMU 的微型代码生成器（TCG）将二进制提升为 LLVM 中间表示，因此同一前端可覆盖 QEMU 支持的全部架构，输出的是可编译的中间表示。作者在此基础上构建与架构无关的分析，在没有符号或调试信息的情况下恢复程序的控制流图与函数边界。一种值域分析（OSRA）用于限定 switch 跳转表等间接跳转的目标，其他分析则处理谓词执行指令、noreturn 函数、尾调用以及依赖上下文的控制流。在为 MIPS、ARM 与 x86-64 构建、分别使用 GCC 与 clang 以 -O2、-O3 和 -Os 编译的 coreutils 上，其函数边界恢复的准确度接近 IDA Pro，并优于 BAP/ByteWeight 与 angr。

- 作者：Alessandro Di Federico; Mathias Payer; Giovanni Agosta
- 原标题：rev.ng: A Unified Binary Analysis Framework to Recover CFGs and Function Boundaries
- 发表载体：CC 2017
- 发表状态：会议论文
- 出版／提交日期：2017 年 2 月 5 日
- 日期依据：ACM 提交的 Crossref 元数据将纸质与在线出版日期均记为 2017-02-05。本条目采用该日期，而非会议日程。
- DOI：10.1145/3033019.3033028
- 来源复核于：2026-10-19
- 收录于：2026-10-29
- 原始论文：<https://dl.acm.org/doi/10.1145/3033019.3033028>
- PDF：<https://nebelwelt.net/publications/files/17CC.pdf>
- 代码：<https://github.com/revng/revng>
- 项目：<https://rev.ng/>
- BibTeX：<https://awesomerea.org/papers/citations/paper-revng.bib>
- 目录页面：<https://awesomerea.org/zh/papers/paper-revng/>
- 记录 JSON：<https://awesomerea.org/papers/paper-revng/record.json>
- 英文版：[English](https://awesomerea.org/papers/paper-revng/index.md)

## 研究范围与局限

评测衡量的是函数边界，而非直接衡量控制流图：作者无法从 GCC 或 LLVM 获取控制流图的真实标签，因此以函数边界准确度（相对 ELF 函数符号的 Jaccard 指数）作为控制流图质量的下界。评测覆盖为 Linux 构建、静态链接并去除调试信息的 105 个 coreutils 程序，只涉及 QEMU 所支持架构中的三种；其他架构及动态链接二进制未经评测。原型会遗漏 x86-64 上部分嵌套 switch 的跳转表，以及 MIPS 上被溢出到栈中的跳转表地址；在 ARM 与 MIPS 上比其他工具占用更多内存；也不会报告 IDA Pro 凭借函数序言启发式找到的死代码，作者将此视为设计取舍。基线为 IDA Pro 6.6、BAP 0.9.9 以及 2016 年 11 月时的 angr。论文本身不涉及反编译为 C。

## 与本合集的关联

补充将机器码提升为编译器中间表示，并以与架构无关的方式恢复控制流图与函数边界的研究，这一分析层是合集所收录 rev.ng 反编译器的基础。

## 发表与复核说明

Crossref 给出三位作者的顺序及页码 131–141；Crossref 的标题为小写，本条目采用作者托管的 11 页 PDF 中的大小写，其页数与 ACM 版本相同。论文报告的原型为 8,011 行 C++ 代码，基于 LLVM 3.8 与 QEMU 2.5.0；致谢部分给出 https://rev.ng/ 作为其自由软件发布地址。revng/revng 仓库此后已发展为完整的 rev.ng 反编译器：在提交 57d81a3 中，README 将其描述为由 rev.ng Labs 开发的反编译器，整体采用 GPLv2 许可，单个文件采用 MIT 许可。

## 一手来源

1. <https://dl.acm.org/doi/10.1145/3033019.3033028>
2. <https://api.crossref.org/works/10.1145/3033019.3033028>
3. <https://nebelwelt.net/publications/files/17CC.pdf>
4. <https://rev.ng/>
5. <https://github.com/revng/revng/blob/57d81a3b0d946ccaa9fed8a13c9871dc36b94747/README.md>

## 相关条目

- [rev.ng 二进制分析框架与反编译器](https://awesomerea.org/zh/resources/revng/index.md) · 精选资源

## 关于此条目

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