遇见数据集

decbench-dataset

收藏
Hugging Face2026-07-05 更新2026-07-06 收录
官方服务:

资源简介:

DecBench反编译器基准测试数据集是一个用于系统评估反编译器的综合基准套件。它采用一个三阶段流程:编译、反编译和评估。数据集包含从40个C语言项目中编译得到的二进制文件(ELF/PE格式)、经过头文件剥离的源代码、由六种主流反编译器(包括angr、phoenix、Ghidra、IDA Pro、Binary Ninja和kuna)生成的函数级反编译C代码输出,以及从源代码提取的控制流图(CFG)。每个函数在三个不同的优化级别(O0、O2和O2-noinline)下被独立编译和评估,总计提供了超过11万个函数样本。数据集通过三个核心指标对反编译结果进行评分:GED(基于源代码与反编译代码控制流图之间的编辑距离衡量结构正确性,完美值为0)、type_match(将恢复的类型与DWARF调试信息中的基准类型进行匹配衡量类型正确性,完美值为1.0)和byte_match(将反编译的C代码重新编译并与原始二进制代码进行字节比较衡量重新编译相似性,完美值为1.0)。数据被划分为四种可下载配置:full(包含全部数据,110,992个函数和806个二进制文件)、hard(仅包含O2-noinline优化级别下的大型函数)、hard-inlined(仅包含O2优化级别下的大型函数)和tiny(一个约100个函数的代表性小样本,用于快速测试)。该数据集旨在支持逆向工程、二进制分析和程序理解领域的研究,特别是用于衡量和比较不同反编译器在恢复代码结构、类型信息和语义等价性方面的能力。需要注意的是,full配置中包含少量源自真实恶意软件(如mirai和mydoom)的编译后二进制文件,这些仅作为具有挑战性的静态分析基准,用户应避免执行这些文件。

The DecBench decompiler benchmark dataset is a comprehensive benchmark suite for systematically evaluating decompilers. It employs a three-stage process: compilation, decompilation, and evaluation. The dataset includes binary files (in ELF/PE formats) compiled from 40 C language projects, header-stripped source code, function-level decompiled C code outputs generated by six mainstream decompilers (angr, phoenix, Ghidra, IDA Pro, Binary Ninja, and kuna), and control flow graphs (CFGs) extracted from source code. Each function is independently compiled and evaluated at three different optimization levels (O0, O2, and O2-noinline), providing over 110,000 function samples in total. The dataset scores decompilation results using three core metrics: GED (structural correctness based on edit distance between source and decompiled code CFGs, with a perfect value of 0), type_match (type correctness by matching recovered types against baseline types from DWARF debugging information, with a perfect value of 1.0), and byte_match (recompilation similarity by recompiling decompiled C code and comparing bytes with original binaries, with a perfect value of 1.0). The data is divided into four downloadable configurations: full (all data, 110,992 functions and 806 binaries), hard (only large functions at the O2-noinline optimization level), hard-inlined (only large functions at the O2 optimization level), and tiny (a representative small sample of about 100 functions for quick testing). The dataset aims to support research in reverse engineering, binary analysis, and program understanding, particularly for measuring and comparing the capabilities of different decompilers in recovering code structure, type information, and semantic equivalence. Note that the full configuration includes a small number of compiled binaries from real malware (e.g., mirai, mydoom), which are included solely as challenging static analysis benchmarks, and users should avoid executing these files.

创建时间:
2026-07-01
原始信息汇总

DecBench 反编译器基准测试数据集

数据集概述

DecBench 是一个用于评估反编译器的基准测试套件,采用三阶段流水线:编译 → 反编译 → 评估。C 项目在多个优化级别下编译,每个范围内的函数由每个支持的反编译器进行反编译,并通过三种指标对输出进行评分。该仓库包含一次完整 DecBench 运行中发布的数据:编译后的二进制文件、项目源代码、反编译输出、源代码控制流图以及每个函数的分数。

数据集结构

decbench-dataset/ ├── README.md # 数据集卡片 ├── dataset.toml # 顶层索引:配置 + 数据集元数据(计数、反编译器、指标) ├── configs/ # 每个配置的下载清单和分数切片 │ ├── tiny/manifest.json # 一个配置的完整文件列表 │ ├── tiny/function_results.json# 筛选出的分数 │ ├── hard/… # 其他配置类似 │ ├── hard-inlined/… │ └── full/manifest.json ├── binaries/<opt>/<project>/<file> # 编译的基准二进制文件(ELF/PE) ├── sources/<project>/<tu>.c # 去除头文件的项目 C 源代码 ├── pipeline_data/ │ └── source_cfgs/<opt>/<project>/<stem>.json# 每个函数的源代码控制流图(节点链接 JSON) ├── results/ │ ├── function_results.json # 所有反编译器的每个函数主分数 │ ├── scoreboard.toml # 聚合排行榜 │ └── <decompiler>/<opt>/<project>/<stem>.c # 反编译的 C 输出 └── decbench_data/ # 轻量级消费者 CLI

优化级别

每个项目在三个优化级别下构建,每个级别是一个独立的数据点:

优化级别 标志 含义
O0 -O0 未优化——简单情况
O2 -O2 优化,包含内联——真正的 -O2
O2-noinline -O2 -fno-inline O2 禁用内联
  • O2 有时被称为 "O2-inlined",因为它包含内联
  • O2-noinline 关闭内联,隔离内联对其他优化的影响

下载配置

数据被分为四个配置:

配置 函数数 二进制文件数 描述
full 110,992 806 全部——40 个项目 × O0 + O2 + O2-noinline
hard 2,252 201 优化,无内联(O2-noinline),函数
hard-inlined 2,527 229 类似 hard包含内联(O2),大函数
tiny 100 100 约 100 个函数,均匀采样,快速代表性切片
  • full 涵盖 40 个项目806 个二进制文件
  • tiny 配置是可重现的随机样本,每个二进制文件最多取一个函数

反编译器与指标

反编译器

六个反编译器后端被评估:

反编译器 说明
angr angr 默认(SAILR)结构器
phoenix angr 驱动,使用 Phoenix 结构器
ghidra NSA Ghidra
ida IDA Pro (Hex-Rays)
binja Binary Ninja
kuna kuna 后端

评估指标

每个函数通过三种指标评分:

  • GED(结构正确性)——源代码 CFG 与反编译 CFG 之间的控制流图编辑距离。完美 = 0(相同结构)。越低越好。
  • type_match(类型正确性)——将恢复的变量/参数类型与 DWARF 真实值匹配。完美 = 1.0(每个真实类型都匹配)。越高越好。
  • byte_match(重新编译相似性)——使用与原始二进制格式/架构匹配的工具链和标志重新编译反编译的 C,并比较汇编。完美 = 1.0(逐字节等价代码)。越高越好。

排行榜中的 Overall 排名:函数在所有适用指标上都完美时才被认为是"完美总体"。

快速开始

安装轻量级消费者 CLI:

bash pip install decbench-data

命令:

bash decbench-data list # 显示配置和计数 decbench-data info tiny # 查看 tiny 内容 decbench-data download tiny --dest ./decbench-tiny # 下载 tiny 切片

支持使用 --include 只下载部分内容,使用 --revision 指定分支/标签,以及通过 --repo-pathDECBENCH_DATASET_LOCAL 环境变量使用本地模式。

源代码 CFG 复用

pipeline_data/source_cfgs/<opt>/<project>/<stem>.json 以节点链接 JSON 格式存储每个函数的 CFG。GED 是纯结构性的——比较仅图拓扑,不读取节点标签或属性。可以重建 nx.DiGraph 并重现 GED 分数。

伦理与安全

full 配置包含少量来自 theZoo真实恶意软件目标(如 mirai、mydoom 等),仅作为编译后的二进制文件及其反编译/评分输出存在,用于基准测试的结构/类型恢复,不要执行这些二进制文件

搜集汇总
数据集介绍
decbench-dataset 数据集图片
构建方式
DecBench数据集专为评估反编译器性能而设计,其构建遵循一套严谨的三阶段流水线:编译、反编译与评估。首先,四十个C语言项目在三种优化级别(O0、O2、O2-noinline)下被编译成二进制文件。随后,每个作用域内的函数经由六种主流反编译器(包括angr、Ghidra、IDA Pro等)进行反编译,生成对应的C语言输出。最后,通过三种核心指标——GED(控制流图编辑距离)、type_match(与DWARF调试信息的类型匹配度)和byte_match(重编译后的字节一致性)——对反编译结果进行量化评分。整个流程产出的二进制文件、项目源码、反编译输出、源码控制流图及逐函数评分,均被系统性地打包至该数据集中,确保无需重复执行流水线即可进行深入分析。
特点
该数据集具有显著的结构化与可扩展特性。其存储布局以项目、优化级别和反编译器为层级进行组织,并提供了四种可独立下载的配置切片:完整的full集、聚焦于大规模优化函数的hard与hard-inlined集,以及轻量均衡的tiny集,满足不同研究场景的需求。尤为重要的是,数据集中源码控制流图以节点-链接JSON格式存储,使得GED这一结构性指标可脱离原始Joern解析环境,通过图形拓扑结构复现,实现了评分的完全可复现性。此外,评分通过统一的function_results.json文件和汇总的scoreboard.toml呈现,便于进行跨反编译器、跨优化级别的性能排名与比较。
使用方法
使用DecBench数据集极为便捷,主要通过一个轻量级的CLI工具decbench-data实现,该工具不依赖重型逆向工程库。用户可先通过pip install decbench-data安装,随后使用decbench-data list命令查看可用的配置切片,并通过decbench-data download <config> --dest <path>命令下载特定切片。该工具支持通过--include参数精确筛选所需的数据类型(如二进制文件、源码、控制流图或结果),并支持--repo-path参数实现本地离线模式,从已有数据集目录复制文件而非从HuggingFace Hub下载。对于已安装DecBench全套工具的用户,该下载功能也作为主CLI的别名可用,确保了工作流程的无缝集成。
背景与挑战
背景概述
DecBench Decompiler Benchmark Dataset 是由多个逆向工程研究机构于近年联合创建的基准测试数据集,旨在系统性评估不同反编译器的性能。其核心研究问题在于如何量化反编译结果的结构正确性、类型准确性与二进制重构相似性。通过编译-反编译-评估的三阶段流水线,该数据集覆盖40个C项目及六种主流反编译器(如Ghidra、IDA Pro、Binary Ninja),并引入GED、type_match与byte_match三种创新度量指标。该数据集的发布为反编译领域提供了首个标准化评估平台,显著推动了二进制分析与逆向工程技术的比较研究,成为该领域的重要参考基准。
当前挑战
该数据集面临的挑战包括:首先,在领域问题层面,反编译器评估长期缺乏统一量化标准,DecBench需解决如何公平比较不同反编译器在处理编译器优化(如内联)后代码结构差异的能力,以及如何定义函数级完美反编译的多个维度。其次,在构建过程中,团队面临编译优化的复杂组合(O0、O2、O2-noinline)带来的数据规模爆炸(全量达110,992个函数),并需处理优化内联对函数边界的破坏性影响。此外,为确保基准的实用性,须谨慎纳入真实恶意软件样本(如Mirai),在保证研究可复现性的同时制定严格的安全处理规范,防止样本被不当使用。
常用场景
经典使用场景
在逆向工程与二进制分析领域,DecBench数据集被广泛用于评估与比较不同反编译器在恢复高级语言结构时的性能。研究者在统一的编译-反编译-评分流水线下,通过对C语言项目进行多级别优化编译,并利用六种主流反编译器(如Ghidra、IDA Pro、Binary Ninja等)进行反编译,实现了对反编译输出在控制流结构正确性(GED)、类型恢复准确度(type_match)和重编译字节相似性(byte_match)三个维度的全面量化评估。这一标准化评估框架为学术界提供了一种可复现、可对比的基准测试方法。
解决学术问题
该数据集系统地解决了反编译器评估中缺乏标准化基准和可复现比较的长期难题。通过构建包含110,992个函数、跨越40个C项目及三种优化级别的海量标注数据库,研究人员得以精确量化不同优化策略(如内联变换)对反编译质量的影响。其提出的GED指标首次将图编辑距离应用于控制流结构量化分析,而byte_match指标则开创性地将重编译字节等价性作为语义保真度的客观标杆。这一多维度评估体系使得学术界能够客观诊断现有反编译器在结构恢复、类型推断和代码生成等方面的局限性,推动了更鲁棒的逆向工具开发。
衍生相关工作
DecBench数据集的发布催生了一系列反编译器改进与评估方法学创新工作。研究者基于其细粒度的GED指标提出了结构敏感的CFG优化算法,系统性地修复了反编译器中控制流扁平化与循环变换失配的问题。type_match分项的细粒度类型约束推动了基于符号执行的类型推断增强方案,特别是在结构体成员偏移恢复方面取得了显著突破。此外,byte_match指标的引入启发了面向反编译输出的语义保持变换研究,衍生出多种基于反编译C代码重编译的二进制等价性验证工具。这些后续工作共同构筑了现代反向工程工具链自动化评估的理论与实践基础。
以上内容由遇见数据集搜集并总结生成
二维码
社区交流群
二维码
科研交流群
商业服务