系统级程序设计结课实验-第一部分
实验要求是老师口述的,参考论文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
系统级程序设计结课实验-第一部分相关推荐
- 系统级程序设计第一课内容——Linux系统与操作 2022.5.2
系统级程序设计第一课内容--Linux系统与操作 文章目录 系统级程序设计第一课内容--Linux系统与操作 一.Linux文件系统与操作 二.文件操作 1.主要函数 2.open() 3.read( ...
- 系统级程序设计第一课
第一课主要讲利用ubuntu 完成一些之前学过的文件操作,结合c语言来实现 利用的函数有 1 open函数 主要是打开文件: int open(const char *pathname, int fl ...
- 网络程序设计结课总结——神经网络篇
前情提要: 为什么深度学习逐渐成为热潮? 随着计算机运算速度的提高和硬件条件的不断改善,神经网络和深度学习逐渐涉及到了生活中的方方面面,成为了当今的一个热门的话题. 我作为初入编程的菜鸟,代码能力比较 ...
- 车辆违章信息管理系统c语言,车辆违章查询系统c语言结课设计.doc
综合性程序设计报告 设计题目: 车辆违章查询系统 指导教师: 朱世敏 班 级: 21214 学 号: 2121416 设 计 者: 孙令朝 成 绩: _______________ 设计时间: 201 ...
- 系统级程序设计第二次作业
1 进程控制 fork() exec函数族 wait() exit() 1.1 创建进程 #include <unistd.h> pid_t fork(void); 功能:创建进程:函数执 ...
- 数字逻辑结课实验 VHDL语言设计洗衣机控制系统
实验题目 洗衣机控制系统设计与实现 实验目的 熟悉数字系统的组成. 2. 掌握自顶向下的设计方法. 3. 了解洗衣机的工作原理. 4. 掌握建立状态机和实现状态机的方法. 5. 了解状态机在洗衣机控制 ...
- hcip结课实验ensp,思考改进点以及遇到的问题
本实验模拟企业网通过 ISP 建立 MPLS-VPN 连接,以及多出口访问互联网的网络环境 改进的地方 1.在实验要求和拓扑里汇聚层和核心层没有设计e-trunk来防止链路的单点故障 2.wlan可以 ...
- 【你还在烦恼你的实验报告吗?】C语言结课实验——学生成绩管理系统
第一次写博客~有什么问题大家多多见谅~欢迎找我探讨hhh 学生成绩管理系统(C语言) 系统功能模块构成 数据结构说明 自定义函数说明: 数据读取:文件读取 视频演示 源代码在此! 学生成绩管理系统(C ...
- 【互动媒体】结课作业第一部分:文献综述
中华文化博大精深,在几千年的历史中,演化出了书法艺术,沉淀了大量璀璨光辉的书法作品.虽然我们与这些作品相隔百年千年,但当如今我们注视着它们时,我们仍可略过漫漫历史长流,感受到作者提笔写下时的心情,接收 ...
- 交互媒体专题设计结课实验报告
一. 作品背景及内容概述 本次作业的灵感来自于参观新媒体艺术展览的时候,不管是主要用来拍照片打卡的teamlab还是其他小众独立的个人作品展,或多或少都会用到绚丽的粒子背景.常见效果比如雨点.星辰.荧 ...
最新文章
- 博士申请 | 哥本哈根大学招收机器学习和信息检索全奖博士生(年薪34万)
- 【拔刀吧少年】之shell数组
- 解决iex -S mix报错
- creator图片循环显示_江淮宣传车厂家价格 图片 配置
- 《Python Cookbook 3rd》笔记(1.15):通过某个字段将记录分组
- oracle管理员登录报错,关于Oracle使用管理员账号登录失败的问题
- 暑期训练日志----2018.8.23
- 活动目录安装方法(个人汇总)
- 免密码自动登录远程服务器脚本
- [ural1297]Palindrome
- Android的Splash界面支持用户点击
- linux socket 程序被ctrl+c或者异常终止,提示:bind error:Address already in use,解决办法...
- js实现查找删除功能
- 10后小学生都能教你学编程了!低龄编程的下限在哪?
- linux ldap客户端工具,openldap(3)linux客户端 启用ldap、sssd 认证
- python爬虫代理ip_Python爬虫如何获取代理ip及ip验证?
- 程序员职场务必了解的薪资待遇
- Path环境变量是什么?有什么用?怎么工作?JDK,JRE,JVM,集成开发工具是什么?有什么用?怎么工作?JDK安装包文件结构?有必要设置Path环境变量?Eclipse和IDEA开发工具的运作
- Sea.js入门教程
- 红灯检测宇视科技专利分析与总结1
热门文章
- unity 加载关卡_Unity手游实战:从0开始SLG——本地化篇(四)提取本地化元素
- 【C/C++】各种数据类型在16位、32位和64位系统下所占字节差异
- 【目标检测大集合】R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记
- python数字图像处理(8):对比度与亮度调整
- sklearn 学习实践之——基于自带数据集(波士顿房价、鸢尾花、糖尿病等)构建分类、回归模型
- fork()和多线程
- Java之常用函数笔记
- 配置mysql字符_mysql字符设置
- cookies时效由谁决定_胎儿的性别,是什么时候定下来的,又是由谁决定的?
- 2021-06-16异步调用 CompletableFuture