系统级程序设计结课实验-第一部分

实验要求是老师口述的,参考论文Towards security defect prediction with AI,使用记忆网络对数据集进行训练,使之能完成代码漏洞的检测,并且!添加新的漏洞类型(原论文提供的数据集只有两种漏洞类型)进行检查!

这一部分先讲一下使用机器学习进行漏洞检查的原理以及配置训练环境的一些情况。

为什么要用机器学习检查漏洞

  因为静态分析工具很难找完或者准确找到代码中的漏洞,即使是最先进的静态分析工具在Juliet Test Suite(一个代码集合,用以测试漏洞检查工具的性能)上表现也不佳。因为静态分析工具需要制定一些规则,来判断代码是否存在漏洞,而有的漏洞往往难以想到,但是数量又众多,所以可以尝试机器学习,给模型喂数据,模型不需要理解代码的逻辑就可以判断代码是否存在漏洞。这只是个人理解,详细可以看上面的论文

训练的原理

  个人不是很懂机器学习,只能讲一个简单的大概,就是将c代码贴上标签(行位放个特殊的注释),然后用clang等工具将c代码转为token文件,然后喂给记忆网络。记忆网络会用position encoding,即位置编码,详见End-to-end memory networks. InAdvances in Neural Information Processing Systems,对所有代码进行编码变成一个矩阵,然后放入记忆网络用一定的算法(看的不太懂...上面给的论文都有详细介绍这个算法)进行训练,最后得出一个模型,通过这个模型就可以对代码进行预测。对于本次实验,并不需要了解记忆网络工作原理和训练原理(毕竟是系统级程序设计,不是机器学习课程)。

配置训练环境

这次实验用到https://github.com/cmu-sei/sa-bAbI的文件,cmu大佬写的代码,说明里面虽然有教怎么使用,但是还是有些问题需要解决一下。

1.docker的安装,可能我这边网比较差,装最新的docker总是装不上,最后用的apt方法来获取docker.io才装上

2.docker-compose build应该更正为sudo docker-compose,不然会提示没有权限,后面生成数据集以及测试也需要用sudo先获取权限。

3.enviroment.yml文件似乎有些问题,需要修改。将文件中的

替换为

# - libgfortran=3.0.1=h93005f0_2
# - libopenblas=0.3.3=hdc02c5d_3
# - mkl=2019.0=118
# - numpy=1.15.2=py36h6a91979_0
# - numpy-base=1.15.2=py36h8a80b8c_0
# - scikit-learn=0.20.0=py36h4f467ca_1
# - scipy=1.1.0=py36h28f7352_1
- pip:
#- libgfortran==3.0.1=h93005f0_2
#- libopenblas==0.3.3=hdc02c5d_3
#- scipy==1.1.0=py36h28f7352_1
#- scikit-learn==0.20.0=py36h4f467ca_1
#- numpy-base==1.15.2=py36h8a80b8c_0
#- numpy==1.15.2=py36h6a91979_0
- numpy==1.15.2
- scipy==1.1.0
- scikit-learn==0.20.0
#- numpy-base==1.15.2

即可。然后按照github上的方法,一直到训练为止都不会有问题,到了python validate.py这一步会出问题,提示文件夹不存在,这个是validate.py中的一个小疏忽。修改方法如下:

将evaluate_oneoff函数下的代码

if not os.path.exists(path):    if models is None:        models = get_models(models_dir)    predic = models[predic_num].predict(        [val_instances_mat, val_queries_mat])    np.save(path, predic)

  修改为:

if not os.path.exists(path):
    if models is None:
        models = get_models(models_dir)
    predic = models[predic_num].predict(
        [val_instances_mat, val_queries_mat])
    if not os.path.exists(os.path.dirname(path)):
        os.makedirs(os.path.dirname(path))
    np.save(path, predic)

即可。

原文地址:https://www.cnblogs.com/pdysb/p/10171288.html

时间: 2024-10-14 12:11:25

系统级程序设计结课实验-第一部分的相关文章

JAVA课程结课实验代码(河北省重大技术需求征集系统设计)

第一部分:账号密码类 package IOP; /** * 数1401班 * 20143253 * 吕鹏博 * 时间 2016年12月21日17:45:42 */ import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.StringToke

JAVA课程结课实验题目(河北省重大技术需求征集系统设计)

为了充分利用京津科技资源,破解河北省省产业转型升级.绿 色崛起所面临的重大技术难题,现面向重点产业.重点领域.重点 企业(单位)征集产业或领域关键技术难题,构建河北省重大技术 需求数据库. 3.数据结构要求:(10分) 定义 Infomati on 类,其中包括六个私有变量(infonumber,infoname, infocontent,infosum,infostate,infoyear). (1)各成员 的含义如下:(5 分) ① 变量 infonumber  为字符串类型 String,

系统级I/O 第八周11.9~11.15

第十章 系统级I/O cp1 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #define BUFFERSIZE 4096//定义存储器容量 #define COPYMODE 0644//定义复制的长度 void oops(char *, char *); int main(int argc, char *argv[]) { int in_fd, o

移动应用开发结课论文

在移动平台开发的课上,老师给了我们一份源码(其实是让我们自己写出来,她是为了给我们参考的哈哈哈),让我们添加她要求的功能,按照博主尿性这次博客肯定就不会介绍这个应用的开发了,我会把结课的论文发上来. Android系统中NFC应用的开发 孙黎楠 摘  要:     近场通信(英语:Near Field Communication,NFC),又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输,在十厘米(3.9英寸)内交换数据.而Android系统支持对关

软件工程终于结课啦

软件工程终于结课了,我们长期被民哥奴役的日子也一去不复返了,话说不是民哥课讲得不好,而是课程内容真的是太无聊了,即使民哥在课堂上时不时的提起班上不好好听课的同学"调戏"一番,以期增加我们对软件工程的乐趣,提高我们在课堂上的注意力,但还是改不掉内容的枯燥性啊,民哥,我们终于结课了,真想让你坐在下边看一下自己讲课的视频,看看课程是多麽的无聊,我们被强迫抬着头专心听你讲课是何等的煎熬!现在我们终于解放了,信计科11级被王老师"践踏"的日子一去不复反了. 现在来细数一下我们

20172323 2018-2019-1 《程序设计与数据结构》第一周学习总结

20172323 2018-2019-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 第一章--概述 1.1 软件质量 软件工程(Software Engineering)是一门关于高质量软件开发的技术和理论的学科. 解决的问题:控制开发过程,实现高质量的软件 软件工程的目标 高质量软件的特征 1.2 数据结构 数据结构:计算机存储.组织数据的形式. 程序 = 数据结构 + 算法 软件 = 程序 + 软件工程 栈会颠倒数据的顺序,而队列可以保持数据的顺序. 第二章--算法分析 算法

20172324 2018-2019-1 《程序设计与数据结构》第一周学习总结

20172324 2018-2019-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 概述 软件质量 准确性:软件提供的功能是否正确(用户需要的) 可靠性:产品在规定的条件下,在规定的时间内完成规定功能的能力 健壮(易恢复)性:系统失效后,重新恢复原有的功能和性能的能力 可用性:在指定使用条件下,产品被理解. 学习.使用和吸引用户的能力 可维护性:在规定条件下,规定的时间内,使用规定的工具或方法修复规定功能的能力 可重用性:软件组建可用于其他软件开发的难易程度 可移植性:从一种环境

第十章实践——系统级I/O代码运行

第十章实践——系统级I/O代码运行 实验代码清单如下: 1. cp1——复制一个文件到另一个文件中(两个已经存在的文件) 复制前: 执行后结果 2.

系统级性能分析工具 — Perf

离2.6.31内核开始.linux核心配备了性能分析工具perf,它可以是功能级和指令级热外表. perf Performance analysis tools for Linux. Performance counters for Linux are a new kernel-based subsystem that provide a framework for all things performance analysis. It covers hardware level (CPU/PM