遇见数据集

bcsd-benchmark

收藏
Hugging Face2026-06-08 更新2026-06-09 收录
官方服务:

资源简介:

BCSD数据集(Binary Code Similarity Detection)是一个专门用于二进制代码相似性检测的资源。它包含从AtCoder、LeetCode和Rosetta Code平台收集的5,212个问题对应的11,639个C/C++源程序,这些程序在x86-64架构上使用GCC和Clang编译器,并应用了五种优化级别(O0、O1、O2、O3、Os)进行编译。数据集提供了编译后的ELF二进制文件(共114,532个文件)、使用angr工具生成的线性反汇编输出(每个二进制对应一个JSON文件)、为jTrans模型准备的基本块反汇编数据,以及预计算的函数嵌入向量(存储为.npy格式,支持baseline、palmtree、refuse、jtrans等方法,嵌入维度分别为16、128、128、768)。此外,数据集还包括原始源代码文件(涵盖C、C++、Go和Rust语言),但当前版本仅编译了C和C++程序,Go和Rust仅以源代码形式提供。文件按照统一的路径结构组织,便于按编译器、架构、优化级别、数据集来源、问题名称和语言实现进行索引。该数据集主要用于二进制代码相似性检测、逆向工程和反汇编分析等任务,用户可直接加载预计算的嵌入向量进行实验。需要注意的是,数据集仅支持x86-64架构,且使用源代码时应遵守原始平台的条款。

The BCSD dataset (Binary Code Similarity Detection) is a resource specifically designed for binary code similarity detection. It includes 11,639 C/C++ source programs corresponding to 5,212 problems collected from the AtCoder, LeetCode, and Rosetta Code platforms. These programs are compiled on the x86-64 architecture using GCC and Clang compilers with five optimization levels (O0, O1, O2, O3, Os). The dataset provides compiled ELF binary files (totaling 114,532 files), linear disassembly outputs generated using the angr tool (each binary corresponds to a JSON file), basic block disassembly data prepared for the jTrans model, and pre-computed function embedding vectors (stored in .npy format, supporting methods such as baseline, palmtree, refuse, and jtrans with embedding dimensions of 16, 128, 128, and 768, respectively). Additionally, the dataset includes original source code files (covering C, C++, Go, and Rust languages), but the current version only compiles C and C++ programs, with Go and Rust provided only in source code form. Files are organized in a unified path structure for easy indexing by compiler, architecture, optimization level, dataset source, problem name, and language implementation. This dataset is primarily used for tasks such as binary code similarity detection, reverse engineering, and disassembly analysis, allowing users to directly load pre-computed embedding vectors for experiments. It should be noted that the dataset only supports the x86-64 architecture, and the use of source code must comply with the terms of the original platforms.

创建时间:
2026-06-08
原始信息汇总

BCSD 数据集概述

名称:BCSD (Binary Code Similarity Detection) 数据集

许可协议:CC-BY-4.0

语言:英语

任务类型:特征提取

标签:二进制代码相似性检测、逆向工程、反汇编、x86-64

数据集规模

  • 包含 11,639 个源程序,来源于 5,212 个编程问题(来自 AtCoder、LeetCode、Rosetta Code)
  • 共编译生成 114,532 个 ELF 二进制文件
  • 数据集大小范围:100K < n < 1M

数据内容与文件结构

文件 大小 说明
sources.tar.zst 22 MB 原始源代码文件 (C, C++, Go, Rust)
binaries.tar.zst 1.85 GB 已编译的 ELF 二进制文件 (114,532 个)
disasm.tar.zst 47 MB 线性反汇编结果 (使用 angr),每个二进制对应一个 JSON 文件
disasm_jtrans.tar.zst 99 MB 适用于 jTrans 模型的基本块反汇编数据
embeddings.tar.zst 538 MB 每个函数的嵌入向量文件 (.npy 格式)

编译配置

  • 编译器:GCC 和 Clang
  • 优化级别:O0, O1, O2, O3, Os
  • 架构:x86-64

路径结构

压缩包 (binaries, disasm, disasm_jtrans, embeddings) 遵循统一的路径布局:

<compiler>/<arch>/<optim>/<dataset>/<problem>/<Lang>__impl_NN

示例:clang/x86_64/Os/rosetta_code/binary_digits/Cpp__impl_01

源代码路径格式:

sources/<dataset>/<problem>/<Lang>/impl_NN.ext

嵌入向量维度

  • baseline: 16维
  • palmtree / refuse: 128维
  • jtrans: 768维
  • 文件 embeddings/index.json 记录了每个函数的嵌入路径映射

使用说明

  • 解压需使用 zstd 工具
  • 可通过 Hugging Face Hub 命令行工具下载
  • 反汇编 JSON 文件中包含函数名称、指令数量及每条指令的操作码和操作数

注意事项

  • 当前版本仅包含 C 和 C++ 的编译结果,Go 和 Rust 代码仅出现在源代码中
  • 仅支持 x86-64 架构
  • 源程序来自 AtCoder、LeetCode 和 Rosetta Code,复用需遵守相应条款
搜集汇总
数据集介绍
bcsd-benchmark 数据集图片
构建方式
该数据集面向二进制代码相似性检测(BCSD)任务,精心构建了一套涵盖C/C++程序的多维度编译与反汇编资源。原始源代码取材于AtCoder、LeetCode与Rosetta Code三大平台,共计11,639个程序,分属5,212个问题。通过采用GCC与Clang两套编译工具链,结合O0至O3及Os五种优化等级,在x86-64架构上编译生成114,532个ELF二进制文件。进一步利用angr工具进行线性反汇编,并针对jTrans模型生成基本块级反汇编结果,同时预计算了多种方法的函数级嵌入向量,形成以编译器、架构、优化等级、问题来源为层级路径的标准化组织体系。
特点
数据集的显著特色在于其系统性的多编译变量覆盖,不仅体现了不同编译器与优化策略对二进制代码形态的深刻影响,还为相似性检测模型提供了丰富的正负样本对。所有文件均采用zstd高效压缩存储,兼顾了数据完整性存储与传输便捷性。反汇编数据以JSON格式呈现,清晰记录函数名称、指令数量及指令细节,而嵌入向量则包含baseline(16维)、palmtree/refuse(128维)与jtrans(768维)等多种维度,直接服务于差异化模型的训练与评估需求。
使用方法
用户可通过Hugging Face Hub便捷下载整个数据集或指定压缩包,解压需借助zstd工具执行标准tar命令。使用过程中,可直接利用Python的json模块解析反汇编文件,遍历函数获取指令级信息;同时借助numpy库加载预计算嵌入向量,其形状为(函数数量,特征维度),便于快速嵌入相似性计算。数据集内嵌的index.json文件为每个函数对应的嵌入路径提供了索引,极大简化了数据检索与批量处理流程,适用于二进制代码相似性分析的学术研究与工程实践。
背景与挑战
背景概述
二进制代码相似性检测(BCSD)是软件逆向工程与安全分析领域的核心研究课题,旨在通过分析编译后的二进制代码片段,识别其功能相似性或同源性。该数据集由研究团队于近年创建,涵盖源自AtCoder、LeetCode和Rosetta Code的5,212个编程问题的11,639个C/C++源程序,经GCC和Clang两种编译器及五种优化级别(O0至Os)编译,生成逾11万份x86-64架构的ELF二进制文件。通过提供标准化反汇编结果与预计算函数嵌入(含baseline、palmtree、refuse、jTrans等方法),该数据集为BCSD模型训练和跨编译器、跨优化级别的可比性评估奠定了基准,推动了二进制分析领域的可复现研究。
当前挑战
领域核心挑战在于跨编译器与优化级别的代码变体识别:同一源函数经不同编译器(GCC与Clang)或优化级别(如O0与O3)编译后,二进制形态差异显著,而现有BCSD方法常依赖特定编译设定,泛化能力不足。构建过程中面临多重困难:海量二进制文件的系统化编译与反汇编需处理不同工具链的兼容性问题;函数边界的精确标注受编译器优化引入的内联、重排等影响;嵌入向量的跨模型可比性需要统一索引与评估协议;此外,数据集目前仅包含x86-64架构与C/C++语言,限制了其在不同指令集与语言场景下的适用性。
常用场景
经典使用场景
在二进制安全与逆向工程领域,BCSD数据集为评估二进制代码相似性检测(BCSD)技术提供了标准化的基准平台。该数据集汇集了源自AtCoder、LeetCode和Rosetta Code的逾万份C/C++程序,经由GCC与Clang两种编译器以五种优化等级编译为x86-64架构的ELF二进制文件,并附带了反汇编结果与预计算的函数嵌入向量。研究者可借用其规范的路径结构与Python接口,快速开展跨编译器、跨优化级别的函数级别相似性比对实验,从而复现或改进主流BCSD方法,如基于图神经网络或Transformer的语义表征模型。
解决学术问题
该数据集直击二进制代码相似性检测领域长期存在的评估碎片化与可复现性缺失之痛。以往研究多依赖自建小规模语料,缺乏统一的跨编译器与优化等级覆盖,致使方法对比缺乏公信力。BCSD通过系统化控制编译变量(编译器、优化等级)和来源多样性(算法问题、编程竞赛、通用编程任务),构建了首个大规模、多维度基准。它解决了如何可靠衡量BCSD方法对编译差异鲁棒性这一核心学术难题,为系统性地探究编译器行为对二进制语义编码的影响提供了实证基础,显著推动了该领域从定性演示向定量评估的范式演进。
衍生相关工作
BCSD数据集的发布催生了多项指向不同技术路线的衍生研究。以Palmtree和ReFuse为代表的嵌入方法利用该数据集的标准化划分,验证了跨编译器语境下指令级与块级语义融合的效能。jTrans模型则借助其提供的基本块级反汇编结构,推广了基于Transformer的二进制函数嵌入预训练范式。此外,研究者基于该数据的函数级索引与多优化等级覆盖,开发出面向闭源软件的漏洞函数搜索系统,将待审计二进制与已知漏洞数据库进行语义级匹配。这些工作共同构筑了从基准评测到工业级检索系统的衔接链条,深刻影响着二进制分析工具的设计方向。
以上内容由遇见数据集搜集并总结生成
二维码
社区交流群
二维码
科研交流群
商业服务