🚀 CLAP:通过自然语言监督学习可迁移的二进制代码表示
CLAP(对比语言 - 汇编预训练)是一个借助自然语言监督来学习二进制代码表示的框架。通过将二进制代码与自然语言解释对齐,它提升了少样本和零样本场景下的分析性能。CLAP利用一个能够自动生成1.95亿对代码片段及其描述的数据集引擎,在二进制代码分析领域提供了一种具有出色可迁移性的方法。我们的目标是为二进制代码分析领域的研究人员和从业者提供一个有效的工具,我们的模型可在Hugging Face模型中心获取。
🚀 快速开始
本文档将帮助您设置并开始使用CLAP模型进行各种任务,包括对排序算法、恶意软件和加密算法进行细粒度分类,且无需进行额外训练。
要求
确保您的系统上已安装Python和PyTorch。然后,使用pip安装Transformers库:
pip install transformers
准备分词器和模型
导入必要的库并初始化模型和分词器:
import torch
from transformers import AutoModel, AutoTokenizer
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
asm_tokenizer = AutoTokenizer.from_pretrained("hustcw/clap-asm", trust_remote_code=True)
text_tokenizer = AutoTokenizer.from_pretrained("hustcw/clap-text", trust_remote_code=True)
asm_encoder = AutoModel.from_pretrained("hustcw/clap-asm", trust_remote_code=True).to(device)
text_encoder = AutoModel.from_pretrained("hustcw/clap-text", trust_remote_code=True).to(device)
使用示例
基础用法
以下是一个对排序算法进行细粒度分类(零样本)的示例:
with open("./CaseStudy/bubblesort.json") as fp:
asm = json.load(fp)
prompts = [
"This is a function related to bubble sort",
"This is a function related to selection sort",
]
asm_input = asm_tokenizer([asm], padding=True, return_tensors="pt").to(device)
asm_embedding = asm_encoder(**asm_input)
text_input = text_tokenizer(prompts, return_tensors='pt').to(device)
text_embeddings = text_encoder(**text_input)
logits = torch.einsum("nc,ck->nk", [asm_embedding.last_hidden_state, text_embeddings.last_hidden_state.T])
preds = torch.softmax(logits / 0.07, dim=1).squeeze(0).tolist()
for i, prompt in enumerate(prompts):
print(f"Probability: {preds[i]*100:.3f}%, Text: {prompt}")
对于其他分类任务,如恶意软件分类和加密算法识别,只需加载相应的数据集并定义相关的自然语言提示,重复上述过程即可。
✨ 主要特性
- 自然语言监督学习:通过自然语言监督学习二进制代码表示,提升少样本和零样本场景下的分析性能。
- 可迁移性强:利用自动生成的大规模数据集引擎,在二进制代码分析领域具有出色的可迁移性。
- 多任务支持:可用于排序算法、恶意软件和加密算法等的细粒度分类,无需额外训练。
📚 详细文档
新闻
引用
如果本工作对您的研究有帮助,请考虑给个星🌟 并引用我们的工作。
@misc{wang2024clap,
title={CLAP: Learning Transferable Binary Code Representations with Natural Language Supervision},
author={Hao Wang and Zeyu Gao and Chao Zhang and Zihan Sha and Mingyang Sun and Yuchen Zhou and Wenyu Zhu and Wenju Sun and Han Qiu and Xi Xiao},
year={2024},
eprint={2402.16928},
archivePrefix={arXiv},
primaryClass={cs.SE}
}
📄 许可证
本项目采用MIT许可证。