一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成方法及系统
文献发布时间:2023-06-19 18:37:28
技术领域
本发明涉及代码摘要生成技术领域,具体涉及一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成方法及系统。
背景技术
随着越来越多的研究人员将深度学习应用到解决软件工程领域的问题上,代码自动摘要技术作为程序理解的一项重要突破,在近几年逐渐成为研究热点。代码摘要是指能简明扼要地描述代码行为、主体和设计思想的一种概括的表示,它可以帮助代码阅读者迅速获取代码基本内容方面的信息。生成代码摘要的任务可以描述为:利用源代码序列来预测方法、变量、类或代码段的名称。自动代码摘要生成是指运用计算机自动地为未知源代码或未知代码片段生成具有可读性的相关描述,为不了解此段代码的阅读者提供代码摘要。源代码的自然语言摘要通过显著减少开发人员的工作量来促进程序理解。
目前的代码摘要生成任务虽然完成了为未知源代码段生成具有可读性的代码摘要的任务,但仍存在以下不足:(1)通常情况下,二进制源代码长度差距较大,使得模型可捕获代码句柄之间的长距离依赖关系能力较差;(2)从源代码编译生成二进制过程中,有很多有助于理解代码意图的信息会被丢失,比如:函数名称、变量名称、数据结构定义、变量类型定义、注释信息等,为二进制代码摘要生成产生了更大的阻碍。
在二进制代码摘要生成任务中,如何解决二进制源代码长度差距较大,使得模型可捕获代码token之间的长距离依赖关系能力较差这一问题,以及如何处理从源代码编译生成二进制过程中,有很多有助于理解代码意图的信息丢失,是二进制代码摘要生成的关键和难点问题。
发明内容
为此,本发明提出一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成方法及系统,以解决现有代码摘要生成方法对于代码长度差距较大、编译过程中信息丢失较多的二进制代码不能有效生成摘要的问题。
根据本发明的一方面,提供一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成方法,该方法包括以下步骤:
将一段程序经过编译和链接过程生成可执行程序,提取其中的二进制代码序列和对应的二进制函数名序列;
对所述二进制函数名序列进行编码,获得函数名表示向量;
将所述二进制代码序列输入BERT预训练语言模型,获取二进制代码序列全局上下文信息特征;
利用多个卷积核对所述二进制代码序列全局上下文信息特征进行局部语义特征提取;
将所述二进制代码序列全局上下文信息特征和局部语义特征输入预训练的深层等长卷积神经网络,获取二进制代码序列的表示向量;
将所述函数名表示向量和所述二进制代码序列的表示向量输入预训练的前馈神经网络,获取二进制代码摘要。
进一步地,提取二进制代码序列和对应的二进制函数名序列的方法包括:去除所述可执行程序中的静态数据区、堆和栈,即获得二进制代码序列和与其对应的二进制函数名序列。
进一步地,对所述二进制函数名序列进行编码,获得函数名表示向量的具体过程包括:对于所述二进制函数名序列中的每一个二进制函数名,提取关键词,计算二进制函数名关键词的词频,所述词频表示该二进制函数名关键词在所述二进制函数名序列中出现的概率;计算二进制函数名关键词的逆文档频率,所述逆文档频率表示该函数名关键词在所述二进制函数名序列中的普遍程度;将所述词频和所述逆文档频率相乘,获得函数名表示向量。
进一步地,所述词频的计算公式为:
其中,
所述逆文档频率的计算公式为:
其中,IDF
进一步地,将所述二进制代码序列输入BERT预训练语言模型,获取二进制代码序列全局上下文信息特征的具体过程包括:
计算二进制代码序列T中每个二进制代码的位置编码,获得所述二进制代码序列T对应的位置编码序列LE;
将所述二进制代码序列T和对应的位置编码序列LE相加,获得输入T
将输入T
将输入T
进一步地,所述二进制代码序列T对应的位置编码序列LE中,每一个位置编码由两个分量组成,第一个分量的计算公式为:
式中,loc表示当前字符在二进制代码序列中的位置;d
第二个分量的计算公式为:
进一步地,在获得输出T
其中,μ表示二进制代码序列经过自注意力机制处理后输出的均值,σ表示二进制代码序列经过自注意力机制处理后输出的标准差;为防止标准差为0时分母失去意义,加入参数ε;α和β为迭代值。
进一步地,利用多个卷积核对所述二进制代码序列全局上下文信息特征进行局部语义特征提取的过程包括:每个卷积核对应一个特征表示矩阵M,M中每一列表示卷积核对于一个字符为单位滑动进行卷积操作得到的特征向量;M中每一列特征向量m
m
其中,f表示Relu激活函数,e表示卷积核中的参数矩阵,b表示偏置值,t
进一步地,将所述二进制代码序列全局上下文信息特征和局部语义特征输入预训练的深层等长卷积神经网络,获取二进制代码序列的表示向量的具体过程包括:
将所述二进制代码序列全局上下文信息特征和局部语义特征相加作为输入向量,对其进行等长卷积操作;计算最大池化层对输入向量进行下采样的结果;重复上述操作log
根据本发明的另一方面,提供一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成系统,该系统包括二进制函数预处理模块、函数名特征提取模块、二进制代码全局特征提取模块、二进制代码局部特征提取模块、二进制代码表示向量获取模块和二进制代码摘要生成模块;其中,
所述二进制函数预处理模块用于将一段程序经过编译和链接过程生成可执行程序,提取其中的二进制代码序列和对应的二进制函数名序列;
所述函数名特征提取模块用于对所述二进制函数名序列进行编码,获得函数名表示向量;
所述二进制代码全局特征提取模块用于将所述二进制代码序列输入BERT预训练语言模型,获取二进制代码序列全局上下文信息特征;
所述二进制代码局部特征提取模块用于利用多个卷积核对所述二进制代码序列全局上下文信息特征进行局部语义特征提取;
所述二进制代码表示向量获取模块用于将二进制代码序列全局上下文信息特征和局部语义特征输入预训练的深层等长卷积神经网络,获取二进制代码序列的表示向量;
所述二进制代码摘要生成模块用于将所述函数名表示向量和所述二进制代码序列的表示向量输入预训练的前馈神经网络,获取二进制代码摘要。
本发明的有益技术效果是:
不同于已有的二进制代码摘要生成模型对于二进制代码特征的提取方式,本发明通过将二进制代码序列位置编码信息输入BERT模型,加强对二进制代码序列的全局语义信息的获取;再将其输入局部语义提取层,获取其局部语义信息。本发明通过一种新的模型构建思路,在代码特征中同时添加两种不同距离的语义信息,使其进行更好地结合;在BERT模型预处理后引入深层等长卷积神经网络,深层等长卷积网络在推理过程中可以逐渐扩大局部语义信息的提取范围。本发明充分结合BERT模型和深层等长卷积神经网络来生成二进制代码摘要,有效提高了代码摘要生成的准确率。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1为本发明实施例一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成方法的流程图;
图2为本发明实施例中BERT结构示意图;
图3为本发明实施例中局部语义信息提取层示意图;
图4为本发明实施例中深层等长卷积神经网络示意图;
图5为本发明实施例中解决生成二进制代码摘要任务的结果示例图。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
本发明实施例提供一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成方法,如图1所示,该方法包括以下步骤:
将一段程序经过编译和链接过程生成可执行程序,提取其中的二进制代码序列和对应的二进制函数名序列;
对所述二进制函数名序列进行编码,获得函数名表示向量;
将所述二进制代码序列输入BERT预训练语言模型,获取二进制代码序列全局上下文信息特征;
利用多个卷积核对所述二进制代码序列全局上下文信息特征进行局部语义特征提取;
将所述二进制代码序列全局上下文信息特征和局部语义特征输入预训练的深层等长卷积神经网络,获取二进制代码序列的表示向量;
将所述函数名表示向量和所述二进制代码序列的表示向量输入预训练的前馈神经网络,获取二进制代码摘要。
本实施例中,优选地,提取二进制代码序列和对应的二进制函数名序列的方法包括:去除所述可执行程序中的静态数据区、堆和栈,即获得二进制代码序列和与其对应的二进制函数名序列。
本实施例中,优选地,对所述二进制函数名序列进行编码,获得函数名表示向量的具体过程包括:
对于所述二进制函数名序列中的每一个二进制函数名,提取关键词,计算二进制函数名关键词的词频,所述词频表示该二进制函数名关键词在所述二进制函数名序列中出现的概率;计算二进制函数名关键词的逆文档频率,所述逆文档频率表示该函数名关键词在所述二进制函数名序列中的普遍程度;将所述词频和所述逆文档频率相乘,获得函数名表示向量。
本实施例中,优选地,所述词频的计算公式为:
其中,
所述逆文档频率的计算公式为:
其中,IDF
本实施例中,优选地,将所述二进制代码序列输入BERT预训练语言模型,获取二进制代码序列全局上下文信息特征的具体过程包括:
计算二进制代码序列T中每个二进制代码的位置编码,获得所述二进制代码序列T对应的位置编码序列LE;
将所述二进制代码序列T和对应的位置编码序列LE相加,获得输入T
将输入T
将输入T
本实施例中,优选地,所述二进制代码序列T对应的位置编码序列LE中,每一个位置编码由两个分量组成,第一个分量的计算公式为:
式中,loc表示当前字符在二进制代码序列中的位置;d
第二个分量的计算公式为:
本实施例中,优选地,在获得输出T
其中,μ表示二进制代码序列经过自注意力机制处理后输出的均值,σ表示二进制代码序列经过自注意力机制处理后输出的标准差;为防止标准差为0时分母失去意义,加入参数ε;α和β为迭代值。
本实施例中,优选地,利用多个卷积核对所述二进制代码序列全局上下文信息特征进行局部语义特征提取的过程包括:每个卷积核对应一个特征表示矩阵M,M中每一列表示卷积核对于一个字符为单位滑动进行卷积操作得到的特征向量;M中每一列特征向量m
m
其中,f表示Relu激活函数,e表示卷积核中的参数矩阵,b表示偏置值,t
本实施例中,优选地,将所述二进制代码序列全局上下文信息特征和局部语义特征输入预训练的深层等长卷积神经网络,获取二进制代码序列的表示向量的具体过程包括:
将所述二进制代码序列全局上下文信息特征和局部语义特征相加作为输入向量,对其进行等长卷积操作;计算最大池化层对输入向量进行下采样的结果;重复上述操作log
本发明另一实施例提供一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成方法,该方法包括以下步骤:
S1.针对一段程序,根据其经过编译和链接过程生成的可执行程序,处理为二进制代码序列和与二进制代码序列对应的二进制函数名序列;
根据本发明实施例,具体过程为:将程序经过编译和链接过程,对于生成的可执行程序,去除其中的静态数据区、堆和栈,提取其中的二进制代码序列和与其对应的二进制函数名序列;其对应的伪代码如下所示。
其中,lc为二进制代码序列集,ln为二进制函数名序列集;Segments为一个可迭代的未知代码段数组,包含的元素是每个段的起始地址;segea为Segments数组的迭代器,指向每个段的起始地址;Functions()会返回一个保存着函数首地址的数组,SegEnd()为段的结束地址,funcea为Functions()数组的迭代器;GetFunctionName()可以通过funcea获取当前函数的名称,functionName记录当前函数名;Chunks()会返回一个函数块的列表,格式为(函数起始地址,函数结束地址)的元组—(startea,endea);namemangle()表示将当前函数名还原为没有经过编译过程的函数名,留存更多信息,ln∪namemangle(functionName)为将当前函数名经过namemangle()并入二进制函数名集中;range()表示(startea,endea)之间的范围,返回一个范围之间函数首地址的数组,以head为其迭代器;lc∪head为将当前二进制代码序列并入二进制代码序列集。
S2.对步骤S1所获得的二进制函数名序列,根据二进制函数名序列进行编码,获得函数名特征和函数名表示向量;
根据本发明实施例,具体方法如下:
a)计算二进制函数名关键词的词频:
其中,
b)计算二进制函数名关键词的逆文档频率:
其中,IDF
c)计算二进制函数名关键词w在二进制函数名集D
其中,
S3.对步骤S1所获得的二进制代码序列,将二进制代码序列输入BERT预训练语言模型,获取二进制代码序列全局上下文信息特征;
根据本发明实施例,如图2所示,具体过程为:
a)计算输入二进制代码序列的位置编码:
T
其中,T为二进制代码序列,LE代表T的每个输入字符的位置编码,由LE
其中,loc表示当前字符在二进制代码序列中的位置,d
b)将二进制代码序列的位置编码通过自注意力机制处理,其相关处理如下:
Q=T
K=T
V=T
其中,T
其中,Q、K、V作为softmax部分的输入,通过运算
T
c)计算标准化处理结果,其计算公式如下:
其中,LS为layerstandard标准化处理步骤,其中μ为二进制代码序列经过自注意力机制层处理后输出的均值,σ为二进制代码序列经过自注意力机制层处理后输出的标准差,为防止标准差为0时分母失去意义,加入参数ε。因为标准化处理过程将输入T
S4.对步骤S3所获得的二进制代码序列全局上下文信息特征,根据局部语义提取层,获取二进制代码序列局部语义特征;
根据本发明实施例,步骤S3所述的输出T
a)T
其中第一步操作代表将上一步中BERT语言预处理模型的输出T
b)计算特征向量m
m
这一步操作为局部语义提取层使用3×K的卷积核进行特征提取,其中e为卷积核中的参数矩阵,b为偏置值,f为Relu激活函数,t
c)计算特征表示矩阵M:
M表示上述操作,由m
d)计算深层等长卷积神经网络的输入矩阵T′
T'
其中,T
S5.对步骤S4所获得的二进制代码序列局部语义特征,根据深层等长卷积神经网络,通过其中的池化层来扩大局部语义的提取范围,再通过等长卷积来提取其语义特征,获得二进制代码序列的表示向量;
根据本发明实施例,步骤S4所述的输出结果T
a)计算对输入进行等长卷积操作的结果:
c
这一步操作为对输入矩阵T
b)计算最大池化层对输入进行下采样的结果:
其中c
c)重复上述操作,计算所需a)、b)操作次数:
COUNT=log
其中COUNT为基本a)、b)操作的重复次数,由特征表示维度(N-2)通过不断减半,即log
T
S6.对步骤S2所获得的函数名表示向量,对步骤S5所获得的二进制代码序列的表示向量,前馈神经网络,获取二进制代码的生成摘要。
根据本发明实施例,步骤步骤S5所述的输出结果T
a)计算前馈神经网络输出值:
T
其中前馈神经网络输入层神经元个数设置为L个,输出层神经元个数设置为步骤S2中的所获得的TF-IDF标签总数,T
b)计算得到样本前馈神经网络输出值所对应的二进制代码摘要:
SUMMARY=D(s
其中输入量s
进一步通过实验验证本发明的技术效果。
在二进制代码数据集WPFX_x86数据集上对本发明提出的模型进行实验分析。WPFX_x86数据集是基于微软用户系统动态链接库文件集采用自动生成方法得到的数据集,该数据集用于二进制代码摘要的自动生成。WPFX_x86数据集总共有40600个二进制代码片段及摘要样本。WPFX_x86数据集是一个以微软系统动态链接库文件为主的数据集。本发明将WPFX_x86数据集划分为训练集占总数的80%,验证集的数量占视频总数的20%,测试集的数量占视频总数的20%。使用BERT预处理提取二进制代码全局语义特征,其特征维度为512d。使用局部语义提取层捕获代码的局部语义特征,其特征尺寸为512d。为了客观地评价本发明的性能,按实施例中描述步骤,测试了本发明在WPFX_x86数据集上的性能,如图5所示,所得的实验结果的精确度能达到62.02%,相比于现有方法提高了11.9%。
本发明另一实施例提供一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成系统,该系统包括二进制函数预处理模块、函数名特征提取模块、二进制代码全局特征提取模块、二进制代码局部特征提取模块、二进制代码表示向量获取模块和二进制代码摘要生成模块;其中,
所述二进制函数预处理模块用于将一段程序经过编译和链接过程生成可执行程序,提取其中的二进制代码序列和对应的二进制函数名序列;
所述函数名特征提取模块用于对所述二进制函数名序列进行编码,获得函数名表示向量;
所述二进制代码全局特征提取模块用于将所述二进制代码序列输入BERT预训练语言模型,获取二进制代码序列全局上下文信息特征;
所述二进制代码局部特征提取模块用于利用多个卷积核对所述二进制代码序列全局上下文信息特征进行局部语义特征提取;
所述二进制代码表示向量获取模块用于将二进制代码序列全局上下文信息特征和局部语义特征输入预训练的深层等长卷积神经网络,获取二进制代码序列的表示向量;
所述二进制代码摘要生成模块用于将所述函数名表示向量和所述二进制代码序列的表示向量输入预训练的前馈神经网络,获取二进制代码摘要。
需要说明的是,本实施例所述一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成系统的功能可以由前述一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成方法说明,本实施例未详述部分参见以上方法实施例。
本发明又一实施例还提供一种计算机,包括存储器和处理器,存储器存储有计算机程序,所述的处理器执行所述计算机程序时实现一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成方法的步骤。
本发明又一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现一种基于BERT模型和深层等长卷积神经网络的二进制代码摘要生成方法。
应当注意,尽管在上文详细描述中提及了若干单元、模块或子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。