从源代码的控制流图中学习特性以定位缺陷

渗透技巧 3年前 (2022) admin
621 0 0

从源代码的控制流图中学习特性以定位缺陷

原文标题:The fowing nature matters: feature learning from the control fow graph of source code for bug localization
原文作者:Yi-Fan Ma, Ming Li
发表期刊:Machine Learning
原文链接:https://link.springer.com/article/10.1007/s10994-021-06078-4
笔记作者:zhanS@SecQuan
笔记小编:cherry@SecQuan

缺陷定位在软件维护中起着重要的作用。目前有研究者基于CFG开展错误定位的研究,然而单纯使用CFG作为源代码的中间表示很难表达源代码完整的语义。因为CFG中相邻的节点在语义上可能完全不相关;而且位于CFG上方的节点会影响执行路径上的后续节点的语义。在本文中,作者提出需要考虑流的特征,使用基于流的GRU从CFG中学习特征。基于流的GRU利用由CFG表示的程序结构来沿着执行路径传播语句的语义,很好地反映了流的本质。 

文章给出了如图1所示的Motivation示例。从图中可以看出,两个相邻的节点(如节点1和节点2)在语义上是不相关的,而距离较远的节点6和节点1、节点4之间确实有语义关系的。因此,不能用GNN来从邻居节点聚集语义。

从源代码的控制流图中学习特性以定位缺陷

Fig.1 Motivation

文章有如下贡献:

  1. 作者控制流图的流性质(前面的语句可能影响执行路径上后续语句的语义,而相邻节点的语义可能不相关)应该被充分考虑。
  2. 提出了一个基于流的GRU从CFG中学习特征,充分考虑了流的性质和路径之间的内在关联。

缺陷定位任务可以表示为:,R为一系列缺陷报告;,C为一系列源代码文件。缺陷定位任务可表示为:,Y是标签。文章所提模型框图如图2所示,由4个部分组成:源代码特征提取、缺陷报告特征提取、融合和预测。

从源代码的控制流图中学习特性以定位缺陷

Fig.2 模型框图

对于缺陷报告特征提取层,作者采用文章“Convolutional neural networks for sentence classifcation”中提到的方法提取缺陷报告的语义特征。源代码特征提取层分为3个子层:xxx;融合层将缺陷报告特征和源代码特征作为输入,使用全连接网络进行特征融合。
文章将源代码对应的CFG表示为,其中V表示CFG的节点(也就是一条语句),E表示CFG的边,X表示节点V对应的语句层特征矩阵。在语句层特征学习中,文章使用驼峰命名拆分源代码的每一个token,删除不重要的标点符号,然后使用word2vec对token进行嵌入;接着使用1D-CNN提取token的语义特征。基于流的GRU设计如图3所示,算法如图4所示。

从源代码的控制流图中学习特性以定位缺陷

Fig.3 基于流的GRU框图

从源代码的控制流图中学习特性以定位缺陷

Fig.4 基于流的GRU算法


安全学术圈招募队友-ing 
有兴趣加入学术圈的请联系 secdr#qq.com

从源代码的控制流图中学习特性以定位缺陷


原文始发于微信公众号(安全学术圈):从源代码的控制流图中学习特性以定位缺陷

版权声明:admin 发表于 2022年4月27日 上午10:30。
转载请注明:从源代码的控制流图中学习特性以定位缺陷 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...