[论文阅读笔记]-PalmTree: 学习一个用于指令嵌入的汇编语言模型

news2024/12/19 5:25:24

深度学习已在众多二进制分析任务中展示了其优势,包括函数边界检测、二进制代码搜索、函数原型推理、值集分析等。现有方案忽略了复杂的指令内结构,主要依赖于控制流,其中上下文信息是嘈杂的,并且可能受到编译器优化的影响。为了解决上述问题,文中提出了一种预训练汇编语言模型,PalmTree,利用三个预训练任务来捕获汇编语言的各种特征,帮助生成高质量表示。实验结果表示,在所有下游任务中 PalmTree 都优于其他指令嵌入方案。

1 问题描述

将深度学习应用于二进制分析任务时,输入大致分为三种:原始字节码、人工提取的特征和通过模型学习到的向量。原始字节码丢失过多信息,人工提取的特征容易出错且耗费人力;通过模型学习指令表征拥有两个优点:(1)避免人工设计工作,降低成本和减少出错概率;(2)可以学习更高级别的特征,而不是单纯的语法特征。

目前通过模型学习指令表征的方法存在下列问题:

  1. 忽视了指令内部复杂的结构,将整条指令视为一个单词或只考虑简单的指令格式。
  2. 部分方法使用控制流图(CFG)捕捉指令间的上下文信息,忽略了因编译器优化导致的噪声,无法反映指令之间的实际依赖关系。

2 解决方案

文中提出的解决方案如下:

  1. 在指令嵌入过程中考虑了操作码、寄存器、立即数、字符串、符号等。
  2. 在指令分词阶段通过 [str] 替换字符串,通过 [addr] 有条件地替换常量,有效解决了词汇溢出(OOV)问题。

3 模型架构

PalmTree 共由三个部分组成:指令对采样、指令分词和汇编语言模型。

3.1 指令对采样

该模块用于生成模型的输入。首先通过 Ninja 对二进制文件进行反汇编得到汇编代码;然后在这些汇编代码中确定每个操作数与其依赖指令间的 def-use 关系。最后从控制流序列中提取指令对样本(用于后续 CWP 任务),基于 def-use 关系从数据流序列提取指令对样本(用于后续 DUP 任务)。

3.2 指令分词

该模块将指令视为 sentences,将指令中得操作码,寄存器等视为 words(tokens)。作者在该阶段设计了一种标准化方法用于防止 Embedding 过程中的词汇表溢出(OOV)问题:

  1. 用符号 [str] 代替指令中的常量;
  2. 有条件地替换常量:当 16 进制常量的长度 >= 5 时,替换为 [addr];当 16 进制常量的长度 < 5 时,保留并编码为 one-hot 向量(作者称这些常量中可能包含局部变量、函数参数、数据结构字段等关键信息)。

3.3 汇编语言模型

该模型分为三个任务:理解指令内部结构(MLM)、上下文窗口预测(CWP)、指令间数据依赖预测(DUP)。

3.3.1 MLM 任务

任务设置:在该任务中,随机选择 15% 的 tokens,将其中的 80% 进行 mask,10% 替换为其它 tokens,剩下的 10% 保持不变。

任务目标:输入 "mov 0x1; mov rdx ",让模型预测 "ebx" 和 "rbx"。

3.3.2 CWP 任务

任务设置:该任务为二分类任务,将目标指令前后 2 步指令都视为相关指令(一个窗口)(有点类似于 NSP 任务,但NSP 只关注相邻语句)

任务目标:输入 "mov ebx, 0x1" 与 "mov rdx, rbx" 这两条指令,模型判断两条指令是否在同一个窗口中。

3.3.3 DUP 任务

任务设置:给定一个指令对 $I_{1}$ 和 $I_{2}$,将 $I_{1} || I_{2}$ 视为正样本,$I_{2} || I_{1}$ 视为负样本。

任务目标:同样输入 "mov ebx, 0x1" 与 "mov rdx, rbx" 这两条指令,模型预测两条指令顺序是否发生交换(即数据依赖关系是否存在)。

4 实验分析

文中预训练数据集包含 x86-64 平台上不同版本的 Binutils4、Coreutils5、Diffutils6 和 Findutils7,并使用不同优化级别的 Clang8 和 GCC9 进行编译。共包含 3266 个二进制文件和 2.25 亿行指令。

文中实验结果如下(部分):

异常检测结果(Outlier Detection):

函数类型签名推断(FunctionType Signature Inference):

值集分析(Value Set Analysis,VSA):

5 全文总结

  • 主要创新:指令对的采样方法、分词的技巧以及消除指令上下文信息噪声的手段。
  • 缺陷:文章采用的数据集规模好像不够,难以覆盖所有的指令场景。
  • 重要发现:编译器优化选项可能会导致控制流中的指令上下文中存在噪声,这种噪声会导致模型产生误报。
  • 研究启示:后续有关汇编代码的嵌入工作可以直接使用该模型进行微调;文章的撰写逻辑和排版十分清晰,可以学习这种写作技巧。

6 原文信息

论文题目:PalmTree: Learning an Assembly Language Model for Instruction Embedding

论文出处:The ACM Conference on Computer and Communications Security (CCS 2021)

文章链接:PalmTree: Learning an Assembly Language Model for Instruction Embedding | Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communications Security

项目地址:GitHub - palmtreemodel/PalmTree: Offical Implementation for PalmTree

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB 是一款基于南京沁恒&#xff08;WCH&#xff09;推出的高性能、低功耗无线通信芯片CH582F的开发板。以下是该开发板的功能和参数详细介绍&#xff1a; 主要特性 双模蓝牙支持&#xff1a; 支持蓝牙5.0标准&#xff0…

数字IC后端设计实现篇之TSMC 12nm TCD cell(Dummy TCD Cell)应该怎么加?

TSMC 12nm A72项目我们需要按照foundary的要求提前在floorplan阶段加好TCD Cell。这个cell是用来做工艺校准的。这个dummy TCD Cell也可以等后续Calibre 插dummy自动插。但咱们项目要求提前在floorplan阶段就先预先规划好位置。 TSCM12nm 1P9M的metal stack结构图如下图所示。…

《网络对抗技术》Exp9 Web安全基础

实验目标 理解常用网络攻击技术的基本原理。 实验内容 Webgoat实践下相关实验。 实验环境 macOS下Parallels Desktop虚拟机中&#xff08;网络源均设置为共享网络模式&#xff09;&#xff1a; Kali Linux - 64bit&#xff08;攻击机&#xff0c;IP为10.211.55.10&#xff09;…

Chrome 132 版本开发者工具(DevTools)更新内容

Chrome 132 版本开发者工具&#xff08;DevTools&#xff09;更新内容 一、使用 Gemini 调试 Network、Source 和 Performance Chrome 131 可以使用 Gemini 调试 CSS&#xff0c;现在可以调试更多模块了 与元素面板中的右键菜单类似&#xff0c;要打开 AI 辅助面板并开始与 …

消息系统之 Kafka

什么是消息系统 消息系统是专用的中间件&#xff0c;负责将数据从一个应用传递到另外一个应用。使应用只需关注于数据&#xff0c;无需关注数据在两个或多个应用间是如何传递的。 消息系统一般基于可靠的消息队列来实现&#xff0c;使用点对点模式或发布订阅模式。数据实时在…

Intel-ECI之Codesys PLC + Ethercat 远端IO + Codesys IDE编程

目录 一、 准备工作 二、安装Codesys 软件 PLC 三、 使用Codesys IDE 编程测试 CODESYS* 是领先的独立于制造商的 IEC 61131-3 自动化软件&#xff0c;适用于工程控制系统。它用于 Intel Edge Controls for Industrial&#xff08;Intel ECI 或 ECI&#xff09;&#xff0c;…

[2015~2024]SmartMediaKit音视频直播技术演进之路

技术背景 2015年&#xff0c;因应急指挥项目需求&#xff0c;我们实现了RTMP推送音视频采集推送&#xff08;采集摄像头和麦克风数据&#xff09;模块&#xff0c;在我们做好了RTMP推送模块后&#xff0c;苦于没有一个满足我们毫秒级延迟诉求的RTMP播放器&#xff0c;于是第一…

Ubuntu24.04 安装 visual studio code

# 导入软件包密钥 wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg# 添加官方库 echo "deb [arch…

docker 搭建自动唤醒UpSnap工具

1、拉取阿里UpSnap镜像 docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/upsnap/upsnap:4 2、创建docker-compose.yml文件&#xff0c;进行配置&#xff1a; version: "3" services:upsnap:container_name: upsnapimage: crpi-k5k93ldwf…

已解决:elasticsearch创建索引失败

报错信息 具体报错&#xff1a; org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [typeillegal_argument_exception, reasonunknown setting [index.mappings.properties.category.analyzer] please check that any required plugins are installed…

PHPstudy中的数据库启动不了

法一 netstat -ano |findstr "3306" 查看占用该端口的进程号 taskkill /f /pid 6720 杀死进程 法二 sc delete mysql

计算机视觉中的特征提取算法

摘要&#xff1a; 本文聚焦于计算机视觉中的特征提取算法&#xff0c;深入探讨尺度不变特征变换&#xff08;SIFT&#xff09;算法。详细阐述 SIFT 算法的原理&#xff0c;包括尺度空间构建、关键点检测、方向分配与特征描述子生成等核心步骤。通过 C#、Python 和 C 三种编程语…

Linux USB开发整理和随笔

目录 1 概述 2 硬件原理基础 2.1 USB发展 2.2 USB的拓扑 2.3 硬件接口 2.4 USB总线协议 2.4.1 通信过程 2.4.2 概念关系 2.4.3 管道PIPE 2.4.4 传输 2.4.5 事务 2.4.6 包结构与类型 2.4.6.1 令牌包 2.4.6.2 数据包 2.4.6.3 握手包 2.5 描述符 2.5.1 设备描述符…

从0开始深入理解并发、线程与登台通知机制

1、从0开始深入理解并发、线程与等待通知机制 为什么开发中需要并发编程&#xff1f; 从阿里、美团的岗位JD其实就能看出来&#xff0c;并发编程和性能优化是密切相关的&#xff0c;使用并发编程可以做到&#xff1a; (1)加快响应用户的时间 比如我们经常用的迅雷下载,都喜欢…

简易记事本项目(基于Vue 3 + Element Plus + SSM 个人事件管理系统)

项目简介 点滴365是一个基于 Vue 3 Element Plus SSM 开发的个人事件管理系统,旨在帮助用户高效管理 个人日程 和 待办事项。系统支持日记撰写、待办事项管理、数据统计分析、图片上传、定时提醒、实时天气等功能,让用户可以更好地记录生活点滴、规划工作任务。 核心技术栈…

IIS服务器部署C# WebApi程序,客户端PUT,DELETE请求无法执行

这两天在自己Windows10电脑上搭建IIS服务器&#xff0c;把自己写的WebApi代码部署上做个本地服务器&#xff0c;结果客户端的PUT和DELETE请求无法执行&#xff0c;GET、POST这些都正常&#xff0c;研究后发现要删除IIS中的“模块”中的"webdavmodule"才能解决。

socket编程UDP-实现滑动窗口机制与累积确认GBN

在下面博客中&#xff0c;我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程&#xff0c;并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接&#xff08;进阶篇&#xff09;_udp socket发送-CSDN博客 下面博客实现了停等机制。 socket编程UDP-实现停…

Android-Glide详解

目录 一&#xff0c;介绍 二&#xff0c;使用 三&#xff0c;源码分析思路 四&#xff0c;with源码分析 五&#xff0c;模拟Glide生命周期管理 一&#xff0c;介绍 Glide目前是安卓最主流的加载图片的框架&#xff0c;也是源码最为复杂的框架之一。 要想完完全全吃透Glide的源…

服务器Ubuntu22.04系统下 ollama的详细部署安装和搭配open_webui使用

服务器Ubuntu22.04系统下 ollama的详细部署安装和搭配open_webui使用 一、ubuntu和docker基本环境配置 1.更新包列表&#xff1a;2. 安装docker依赖3. 添加docker密钥4.添加阿里云docker软件源5.安装docker6.安装完成docker测试7. docker配置国内镜像源 二、安装英伟达显卡…

【视频生成模型】——Hunyuan-video 论文及代码讲解和实操

&#x1f52e;混元文生视频官网 | &#x1f31f;Github代码仓库 | &#x1f3ac; Demo 体验 | &#x1f4dd;技术报告 | &#x1f60d;Hugging Face 文章目录 论文详解基础介绍数据预处理 &#xff08;Data Pre-processing&#xff09;数据过滤 (Data Filtering)数据标注 (Data…