🚀 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許可證。