论文部分内容阅读
随着信息技术的发展,各式各样的软件服务于社会的方方面面。程序作为软件的主要组成部分,其分析和理解是实现大规模软件分析、管理和检索的前提,而诸如功能分类、安全性分类等程序分类任务,是程序分析理解的典型任务。随着程序规模的爆炸性增长和深度学习在自然语言处理中的突破,研究者开始基于深度学习进行大规模程序分类,其本质是程序信息的编码和特征提取,如何针对程序特点将程序分析和深度学习进行融合,是提升分类效果的关键。本文在系统研究了现有方法的基础上,提出了针对源程序和二进制程序分类的两种新方法。方法一针对不完整源程序分析困难,程序分析技术和建模技术结合不紧密的缺陷,提出了基于双流卷积神经网络(CNN)进行源程序分类的新方法。该方法使用模糊解析工具提取程序抽象语法树(AST)信息,将其与程序本身一起作为模型输入。区别于现有方法,该方法可以同时处理完整源程序和不完整程序片段,可以引入注释等非程序信息。实验验证了该方法可以在完整和非完整程序功能分类任务中取得比现有方法更好的效果。方法二针对二进制程序长度过长,浅层信息少的问题,提出了基于层次化递归神经网络(HierachicalLSTM)的二进制程序分类新方法。该方法基于程序控制流图(CFG)将超长二进制程序分割为适合深度神经网络处理的程序块,使用分层递归神经网络进行建模。区别于现有方法,该方法充分考虑了程序的层次性,在二进制编译优化选项分类实验中取得了比现有方法更好的效果。实验还探讨了输入数据形态、预处理方式、程序长度等因素对分类效果的影响。