论文复现_从 CONAN 中收集 TPL 数据集

1. 概述

CONAN:Conan是一个用于C++项目的开源包管理工具。 它的主要目标是简化C++项目的依赖关系管理过程,使开发人员能够更轻松地集成、构建和分享C++库。 其中有一些比较独特的功能,例如:版本管理、第三方库管理等。

TPL 数据集:本文首先 CONAN recipe,并从中提取出 1753 个 TPL 名称,这些 TPL 名称将用于后续的 TPL 依赖关系提取。之后,通过网络爬虫收集各 TPL 从在的依赖关系。最后以手动编译的方式,生成 TPL 对应的二进制文件。

2. 二进制文件生成

brunsli:在 GitHub 下载 brunsli 源码​​​​​​,并通过 cmake 进行编译:

%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

! rm -r /brunsli

# 克隆 brunsli 仓库
!git clone https://github.com/google/brunsli.git

# 进入项目目录
%cd brunsli

!git submodule update --init --recursive

!cmake -DCMAKE_BUILD_TYPE=Release -B out

!cmake --build out --config Release

# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

c-blosc:在 GitHub 下载 c-blosc 源码​​​​​​,并通过 cmake 进行编译:

%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

! rm -r /c-blosc

# 克隆 brunsli 仓库
!git clone https://github.com/Blosc/c-blosc.git

# 进入项目目录
%cd c-blosc

!mkdir build

%cd build


!cmake -DCMAKE_INSTALL_PREFIX=your_install_prefix_directory ..

!ccmake ..      # run a curses-based interface

!cmake --build .

!ctest

!cmake --build . --target install

# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

c-blosc2:在 GitHub 下载 c-blosc2 源码​​​​​​,并通过 cmake 进行编译:

%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

! rm -r /c-blosc2

# 克隆 brunsli 仓库
!git clone https://github.com/Blosc/c-blosc2.git

# 进入项目目录
%cd c-blosc2

!mkdir build

%cd build


!cmake -DCMAKE_INSTALL_PREFIX=your_install_prefix_directory ..

!ccmake ..      # run a curses-based interface

!cmake --build .

!ctest

!cmake --build . --target install

# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

HdrHistogram_c:在 GitHub 下载 HdrHistogram_c 源码​​​​​​,并通过 cmake 进行编译:

%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

! rm -r /HdrHistogram_c

# 克隆 brunsli 仓库
!git clone https://github.com/HdrHistogram/HdrHistogram_c.git

# 进入项目目录
%cd HdrHistogram_c

!mkdir build

%cd build

!cmake ..

!make

# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

hexl:在 GitHub 下载 hexl 源码​​​​​​,并通过 cmake 进行编译:

%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

! rm -r /hexl

# 克隆 brunsli 仓库
!git clone https://github.com/intel/hexl.git

# 进入项目目录
%cd hexl

!mkdir build

%cd build

!cmake ..

!make

# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

HiGHS:在 GitHub 下载 HiGHS源码​​​​​​,并通过 cmake 进行编译:

%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

! rm -r /HiGHS

# 克隆 brunsli 仓库
!git clone https://github.com/ERGO-Code/HiGHS.git

# 进入项目目录
%cd HiGHS

!mkdir build

%cd build

!cmake ..

!make

# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

json-schema-validator:在 GitHub 下载 json-schema-validator源码​​​​​​,并通过 cmake 进行编译:

%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

! rm -r /json-schema-validator

# 克隆 brunsli 仓库
!git clone https://github.com/pboettch/json-schema-validator.git

# 进入项目目录
%cd json-schema-validator

!mkdir build

%cd build

!cmake ..

!make

# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'

3. 组件识别实验

"c-blosc2": ["lz4/1.9.Z","zlib/1.3.Z","zstd/1.5.Z"]

将 c-blosc2 作为 target,将 zlib 与 zstd 作为candidate,通过 LibAM 进行组件识别。实验结果表明,LibAM 可以有效识别 c-blosc2 的重用关系。

"brunsli": ["brotli/1.0.Z"]

编译后的 brunsli 生成一系列测试文件,如 build_huffman_table_test、c_api_test、context_test 等。通过 IDA Pro 分析这些测试文件发现,这些测试文件与 brotli 存在许多公共函数。因此,将这些测试函数作为 target,将 brotli 作为candidate,通过 LibAM 进行组件识别。实验结果表明,LibAM 可以有效识别 brunsli 的重用关系。

"c-blosc": ["lz4/1.9.Z","snappy/1.1.Z","zlib/1.3.Z","zstd/1.5.Z"]

编译后的 brunsli 生成两个文件,libblosc.so.1.21.7 与 libblosc_testing.so。通过 IDA Pro 分析这些测试文件发现,这些测试文件与 zstd 和 zlib 存在许多公共函数。因此,将这些函数作为 target,将 zstd 和 zlib 作为candidate,通过 LibAM 进行组件识别。实验结果表明,LibAM 可以有效识别 brunsli 的重用关系。

相关推荐
封步宇AIGC1 分钟前
量化交易系统开发-实时行情自动化交易-Okex交易数据
人工智能·python·机器学习·数据挖掘
z千鑫3 分钟前
【人工智能】利用大语言模型(LLM)实现机器学习模型选择与实验的自动化
人工智能·gpt·机器学习·语言模型·自然语言处理·自动化·codemoss
shelly聊AI5 分钟前
AI赋能财务管理,AI技术助力企业自动化处理财务数据
人工智能·财务管理
波点兔5 分钟前
【部署glm4】属性找不到、参数错误问题解决(思路:修改模型包版本)
人工智能·python·机器学习·本地部署大模型·chatglm4
佚明zj1 小时前
全卷积和全连接
人工智能·深度学习
久绊A2 小时前
网络信息系统的整个生命周期
网络
并不会2 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
_PowerShell2 小时前
[ DOS 命令基础 3 ] DOS 命令详解-文件操作相关命令
网络·dos命令入门到精通·dos命令基础·dos命令之文件操作命令详解·文件复制命令详解·文件对比命令详解·文件删除命令详解·文件查找命令详解
龙鸣丿2 小时前
Linux基础学习笔记
linux·笔记·学习
qzhqbb4 小时前
基于统计方法的语言模型
人工智能·语言模型·easyui