five

CG-bench

收藏
Hugging Face2025-09-05 更新2025-09-06 收录
下载链接:
https://huggingface.co/datasets/jameschennerd/CG-bench
下载链接
链接失效反馈
官方服务:
资源简介:
CG-Bench是一个用于评估大型语言模型在辅助构建真实世界C/C++代码库调用图方面的能力的综合基准数据集。它专注于间接函数调用,特别是通过函数指针的调用。数据集包括来自七个主要开源项目的104个示例,涵盖了多种函数指针使用模式。
创建时间:
2025-09-04
原始信息汇总

CG-Bench 数据集概述

数据集简介

CG-Bench 是一个综合性基准数据集,旨在评估大型语言模型(LLMs)在真实世界 C/C++ 代码库中辅助构建调用图的能力。该基准特别关注通过函数指针进行的具有挑战性的间接函数调用,这对传统静态分析工具来说 notoriously 难以解决。

数据集结构

包含的项目

基准包含来自七个主要 C/C++ 项目的示例:

项目 领域 代码行数(千行) 描述
openssh 安全 ~120 安全外壳(SSH)协议实现
curl 网络 ~182 用于传输数据的命令行工具和库
redis 数据库 ~200 内存数据结构存储
zfs 文件系统 ~380 ZFS 文件系统实现
wrk 基准测试 ~601 HTTP 基准测试工具
ffmpeg 多媒体 ~1,257 完整的多媒体框架
gcc 编译器 ~6,200 GNU 编译器集合
总计 所有领域 ~8,940 7 个主要开源项目

函数指针类别

基准将函数指针使用模式分为 11 个不同的类型:

  1. fnptr-callback(15 个示例):用作回调的函数指针
  2. fnptr-cast(7 个示例):带有类型转换的函数指针
  3. fnptr-dynamic-call(5 个示例):动态解析的函数调用
  4. fnptr-global-array(6 个示例):全局数组中的函数指针
  5. fnptr-global-struct-array(12 个示例):全局结构数组中函数指针
  6. fnptr-global-struct(11 个示例):全局结构中的函数指针
  7. fnptr-library(20 个示例):库接口中的函数指针
  8. fnptr-only(12 个示例):没有复杂模式的基本函数指针调用
  9. fnptr-struct(14 个示例):存储在结构中的函数指针
  10. fnptr-varargs(1 个示例):带有可变参数的函数指针
  11. fnptr-virtual(1 个示例):C 语言中的虚拟函数式模式

数据集内容

示例格式

每个示例遵循一致的结构:

示例 N

调用点

函数指针调用的完整路径和位置

fnptr: function_pointer_name targets: target_function1, target_function2, ...

相关代码片段

c // 显示函数指针使用的相关代码上下文

数据提取

要生成结构化 JSON 数据集:

bash python3 extract_from_markdowns.py

数据格式

生成的 JSON 遵循以下结构:

json { "project_name": { "callsite_path": { "callsite": "function_pointer_name", "type": "category", "chain_summary": [ { "source_code": ["line1", "line2", ...], "parent": "" } ], "callees": { "targets": { "target_function": "" } } } } }

基准统计

  • 总示例数:104
  • 项目类别:7 个主要开源项目
  • 函数指针模式:11 个不同类别
  • 代码上下文:每个示例多个代码片段显示使用模式
  • 真实世界复杂性:来自生产代码库的示例

使用案例

该基准设计用于:

  1. LLM 评估:评估语言模型理解复杂代码模式的能力
  2. 工具开发:用于调用图构建的静态分析工具基准测试
  3. 研究:研究真实世界代码库中的函数指针解析
  4. 教育:理解 C/C++ 中各种函数指针使用模式

许可信息

该项目采用 MIT 许可证 - 详见 LICENSE 文件。

引用信息

如果研究中使用了此基准,请引用:

bibtex @inproceedings{cgbench2025, title={CG-Bench: Can Language Models Assist Call Graph Construction in the Real World?}, author={[Authors]}, booktitle={Proceedings of the 1st ACM SIGPLAN International Workshop on Language Models for Programming (LMPL 2025)}, year={2025}, publisher={ACM}, address={New York, NY, USA}, url={https://conf.researchr.org/home/icfp-splash-2025/lmpl-2025}, note={Co-located with SPLASH 2025} }

搜集汇总
数据集介绍
main_image_url
构建方式
在程序分析领域,CG-bench数据集通过系统化方法构建,涵盖七个主流开源C/C++项目的真实代码库,包括openssh、curl、redis等跨领域项目。数据提取过程聚焦于函数指针的间接调用场景,采用人工标注与自动化脚本结合的方式,从项目源代码中精确识别并分类104个典型实例,确保每个案例包含完整的调用站点信息、目标函数映射及相关代码片段。
使用方法
研究人员可通过执行提取脚本将Markdown格式案例转换为结构化JSON数据,进而用于大语言模型在程序理解任务中的性能评估。该基准支持调用图构建工具的验证、复杂代码模式的分析研究,以及教育场景中函数指针机制的实例教学,使用者需依据提供的代码上下文与目标函数映射开展模型推理或静态分析工具的精度测试。
背景与挑战
背景概述
在程序分析与软件工程领域,调用图构建作为基础性技术,对代码优化、安全审计及程序理解具有关键支撑作用。CG-bench数据集由研究团队于2025年创建,聚焦C/C++代码中间接函数调用的解析难题,涵盖openssh、curl等7个知名开源项目的真实代码场景。该数据集通过系统化标注104个函数指针用例,为语言模型在程序分析领域的性能评估提供了标准化基准,推动了静态分析与人工智能技术的交叉融合。
当前挑战
该数据集核心挑战在于解决间接函数调用解析这一长期困扰静态分析工具的领域难题,特别是函数指针的动态绑定、类型转换及多态调用等复杂模式。构建过程中需克服真实代码库的异构性,准确提取跨文件上下文依赖,并建立涵盖11种函数指针模式的分类体系。同时需平衡代码样本的多样性与标注一致性,确保模型评估结果具有可比性和泛化能力。
常用场景
经典使用场景
在程序分析与软件工程领域,CG-bench数据集为评估大型语言模型在复杂代码场景中的调用图构建能力提供了标准化的测试平台。该数据集通过系统收集来自七个主流开源项目的104个真实案例,专注于函数指针这一传统静态分析工具难以处理的间接调用模式,为研究者提供了涵盖11种不同函数指针使用模式的丰富语料库。
解决学术问题
CG-bench有效解决了程序分析中长期存在的间接调用解析难题,为学术界提供了评估新型分析方法的基准框架。通过系统化标注真实项目中的函数指针调用关系,该数据集显著推进了静态分析工具在精度与召回率方面的研究进展,同时为语言模型理解复杂代码语义的能力评估建立了科学标准,对软件安全性与可靠性研究具有深远影响。
实际应用
在实际工业场景中,CG-bench支撑了开发高级代码分析工具的关键需求,广泛应用于软件安全审计、性能优化和系统维护等领域。基于该数据集训练的模型能够准确识别开源项目如FFmpeg、GCC中的复杂函数指针调用链,极大提升了自动化漏洞检测和代码重构的可靠性,为大型软件系统的质量保障提供了技术基础。
数据集最近研究
最新研究方向
在程序分析与软件工程领域,CG-bench数据集正推动大语言模型在复杂代码模式理解方面的前沿探索。该数据集聚焦C/C++代码库中棘手的间接函数调用问题,特别是通过函数指针实现的调用场景,这些场景对传统静态分析工具构成显著挑战。当前研究热点集中于利用大语言模型的语义理解能力,提升对11种不同函数指针使用模式的解析精度,涵盖从回调机制到动态调用等多样化场景。这一研究方向不仅关联软件安全分析与漏洞检测的实际需求,还影响编译器优化与程序理解的技术发展,为构建更可靠的自动化代码分析工具提供重要基准。数据集涵盖openssh、curl等7个主流开源项目的真实代码,确保了研究结果在工业界的适用性与推广价值。
以上内容由遇见数据集搜集并总结生成
5,000+
优质数据集
54 个
任务类型
进入经典数据集
二维码
社区交流群

面向社区/商业的数据集话题

二维码
科研交流群

面向高校/科研机构的开源数据集话题

数据驱动未来

携手共赢发展

商业合作