论文复现_从 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 的重用关系。

相关推荐
OpenAnolis小助手几秒前
直播预告:LLM for AIOPS,是泡沫还是银弹? |《AI 进化论》第六期
人工智能
我一身正气怎能输9 分钟前
游戏大厂A*寻路优化秘籍:流畅不卡顿
人工智能·游戏
johnny2331 小时前
AI工作流编排平台
人工智能
Xudde.1 小时前
Quick2靶机渗透
笔记·学习·安全·web安全·php
河北瑾航科技1 小时前
广西水资源遥测终端 广西水利遥测终端 广西用水监测遥测终端 河北瑾航科技遥测终端机HBJH-B01说明书
网络·科技·水文遥测终端机·遥测终端机·广西水资源遥测终端机·广西水利遥测终端·广西用水终端
百***35482 小时前
DeepSeek在情感分析中的细粒度识别
人工智能
AA陈超2 小时前
Git常用命令大全及使用指南
笔记·git·学习
Qzkj6662 小时前
从规则到智能:企业数据分类分级的先进实践与自动化转型
大数据·人工智能·自动化
羑悻的小杀马特2 小时前
轻量跨云·掌控无界:Portainer CE + cpolar 让远程容器运维像点外卖一样简单——免复杂配置,安全直达对应集群
运维·网络·安全·docker·cpolar
weixin79893765432...2 小时前
React + Fastify + DeepSeek 实现一个简单的对话式 AI 应用
人工智能·react.js·fastify