1 Bug Finder概述

Polyspace®Bug Finder,顾名思义是一个查找Bug的工具。它可以识别C和C++嵌入式软件中的运行时错误,并发问题,安全漏洞和其他缺陷。
Bug Finder采用语义分析技术检测软件Bug,因此只需要提供源代码,不需要测试用例,也不需要运行代码就能检测出软件Bug。在软件开发过程的早期即可发现漏洞并修复。
另外,Bug Finder也可以检查软件是否符合编码规则标准,例如MISRAC®,MISRA®C ++,JSF®++,并生成检查报告。

2 Bug Finder配置流程图解

本章节通过一个例子演示Bug Finder检查代码漏洞的一般过程,并简要说明一些注意事项。在不同项目中的配置根据实际情况会有所区别。
本例在Polysapce2018a环境下进行。

2.1 准备源代码

首先需要准备被检测的源代码。在汽车嵌入式软件开发流程中,通常是分析模型生成的代码和手写代码。
本文中,自己创建一个带有Bug的C代码demo.c,内容如下:

#include <stdio.h>void fibonacci(void)
{int i;int fib[10];for (i = 0; i < 10; i++) {if (i < 2) fib[i] = 1;else fib[i] = fib[i-1] + fib[i-2];}printf("The 10-th Fibonacci number is %i .\n", fib[i]);   /* Defect: Value of i is greater than allowed value of 9 */
}

代码中定义了一个10维数组fib,因此它合法的索引应该是0~9。在中间的一次for循环后,整形变量i的数值累加到了10,然后printf语句又引用了fib[i],也就是说把10作为fib的索引。这是一个常见的数组下标越界的错误。后文会用Bug Finder将它检测出来。

2.2 新建工程

1)打开Polyspace,File–New Project打开新建工程窗口。在创建工程窗口中输入Project Name,Version,Author。工程路径可以默认,也可以去掉勾选Use default location,选择自定义路径。然后点击Next。

2)添加头文件和源文件
接下来的窗口中要选择存放源文件后头文件的文件夹。选中左侧Project Source Files,点击右侧的Browse,选择存放c文件demo.c的文件夹src,点击Open,该路径会出现在Select Source Folder中。

此时还并没有添加进来。需要勾选Add recursively并点击下方的Add Source Folders,然后C代码会被添加到左侧的树状图中。

同理,在Project Include中添加头文件。本示例中没有头文件,如果有头文件但是漏了添加,分析会报错。
3)完成添加后Finish,在Polyspace左侧的Project Browser中会显示项目名demo,Project Source Files文件夹,以及自动新建一个Module_1。Module_1下有一个Module Source Files和Configuration文件夹。这里可以把Module理解成一个检查任务,每个Module(模块)可以根据不同的参数配置卡来检查项目中的某些C文件或所有C文件。

4)同时,在之前选择的项目文件夹路径下,会出现项目文件demo.psprj和Module_1文件夹

2.3 配置项

点击Project Browser Configuration下的demo,就可以在右侧看到的配置栏。下面会说明常用配置的含义。

1)Target&Compiler
这是针对不同的目标处理器和编译器的配置。其中,配置目标语言为C语言,Compiler和Target Processor type根据项目实际来选择即可。这里主要是因为不同的处理器对应的数据类型长度会有区别。本例没有要求,默认即可。其余选项一般默认即可。

2)Macros
宏相关定义。用于宏定义和屏蔽宏,相当于在代码中定义的宏。根据需要来添加相关的宏即可。

3)Enviroment Settings
环境设置。
其中Code from DOS or Windows file system (-dos)表示代码来源,由于是win7系统,此项需要勾选。
Stop analysis if a file does not compile 表示如果编译不通过,则分析中止。此项也要勾选上。

4)Inputs&Stubbing
输入和插桩。
这一项可以限制变量范围,插桩等。属于高级玩法,笔者也不太了解。
5)Coding Rules&Coding Metrix
检查代码规范
右边可以勾选需要检查的代码规范。并且通过勾选Metrix生成代码规范报告等。本例不进行设置。

6)Bug Finder Analysis
这一部分非常重要,这里可以看到BugFinder的所有检查项,并且可以选择custom来自定义检查项。本例默认即可。

7)Reporting
报告部分必须要勾上。

至此,Bugfinder的一些必要的配置项就已经配置完毕。

2.4 运行并生成报告

在运行之前,首先勾选上Create New Bug Finder Result Folder,这样每次运行都会生成一个新的报告,不会覆盖。

然后点击Run Bug Finder运行检测。右侧会显示分析进度。

2.5 分析结果查看

运行完毕后,会自动切换到报告页。报告页包含以下三部分:
1)Result List列出了所有的分析结果,包括Bug类型,严重等级和处理状态等。

2)Result Details显示了某条Bug的详细信息。

3)Dashboard显示了分析结果概要,包括严重等级饼状图,文件数量等。

在左边的Result List中找到Static Memory下的Array access out of bounds,该问题分类就是我们C文件中故意设置的数组下标越界的Bug,点击该条Bug,会在右侧显示详细信息。

右侧的Result Details中也给出了具体的说明。
“Attempt to access to array element 10. Valid index range: [0 … 9].”
意思是索引范围应该是0~9,但是代码试图取第10个元素。

在Result Detail下方可以切换到Source窗口,该窗口定位到了该Bug所在的具体的位置,第16行。

至此,就已经完成了一个Bug Finder 的分析流程。

3 总结

Bug Finder的环境建立流程比较简单,主要需要关注的点在于2.3-6中的检查项分类,以及检查完毕后对结果的研究和处理。后续会研究各个不同的检查项内涵,并总结Bug可能产生的地方以及改进方法。

>>返回个人博客总目录

Polyspace应用:Bug Finder检测代码漏洞相关推荐

  1. 这款 IDEA 插件,检测代码漏洞,一键修复,真是太厉害了!

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...

  2. 一款牛逼的IDEA插件:检测代码漏洞

    前言 本插件作为Java项目静态代码安全审计工具,侧重于在编码过程中发现项目潜在的安全风险,并提供一键修复能力. 本插件利用IDEA原生Inspection机制检查项目,自动检查当前活跃窗口的活跃文件 ...

  3. 基于图神经网络的代码漏洞检测方法

    文章结构 1. 引言 1.1 漏洞现状 1.2 漏洞研究传统特点 现有的研究方案大多把源代码转化为文本序列,使用自然语言处理中常用的循环神经网络进行自动化特征提取,但这忽略了代码中由于跳转.循环.判断 ...

  4. 【目标检测】基于yolov3的血细胞检测和计数(无bug教程+附代码+数据集)

    多的不说,少的不唠,先看检测效果图: 共检测三类:红细胞RBC.白细胞WBC.血小板Platelets Hello,大家好,我是augustqi.今天给大家带来的保姆级教程是:基于yolov3的血细胞 ...

  5. 常见的代码漏洞——关键词

    目录 描述 特征 常见的代码检测工具 常见的代码漏洞 描述 检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和 ...

  6. python直接执行代码漏洞_修复Python任意命令执行漏洞

    Author:JoyChou@美丽联合安全 Date:20180605 1. 前言 今天遇到一个不好做白名单的Python命令执行漏洞修复的问题.由于是shell=True导致的任意命令执行,一开始大 ...

  7. 永恒之蓝漏洞原理 445_新代码漏洞“永恒之黑”该如何警惕?

    中科天齐公司是在中科院计算技术研究所的大力推动下,以中科院计算所国际领先的自主研究成果"软件代码漏洞检测修复平台(Wukong悟空)"为基础组建的高新技术企业. 北京时间3月12日 ...

  8. ie浏览器修复_腾讯安全:IE浏览器曝远程执行代码漏洞 腾讯安全强势推出漏洞修复工具...

    近日,微软发布一例远程执行代码漏洞(CVE-2019-1367)漏洞修复补丁,攻击者可利用网页挂马和邮件进行攻击,得手后获取用户权限,控制大量系统,造成严重影响.腾讯安全团队自该漏洞安全公告发布之后, ...

  9. 用Fortify SCA分析代码漏洞

    http://www.cnblogs.com/hyddd/archive/2009/02/23/1396790.html hyddd原创,转载请说明. 上次介绍了用FindBugs辅助分析代码漏洞,这 ...

最新文章

  1. linux mysql主主复制_MySQL主从复制与主主复制
  2. excel vba编程代码大全_实战VBA代码一键提取EXCEL中的所有公式!
  3. 牛客题霸 [买卖股票的最好时机] C++题解/答案
  4. 没有内存条电脑能开机吗_换内存加固态,老电脑也能快到起飞,附纯国产内存条雷赤测评...
  5. 国内首家!平头哥宣布开源RISC-V内核MCU芯片设计平台;IBM驳斥谷歌量子霸权主张;Facebook将赔偿350亿美元……...
  6. elementUI Drawer 抽屉 Dialog 对话框 等弹出组件的遮罩层以及多层遮罩解决办法
  7. linux 脚本返回值
  8. burst什么意思_为什么Windows/iOS操作很流畅而Linux/Android却很卡顿呢?
  9. php 判断字符串中是否包含另一个字符串 strpos
  10. 25个优秀的UI设计资源下载
  11. ETH-TRUNK链路原理和实验
  12. BigDecimal 基本使用 比较大小和加减乘除
  13. SAP CDS View基础语法
  14. 分享一下linux系统的精彩描述
  15. AIX系统中 .toc文件是做什么用的
  16. Tikhonov正则化工具包(MATLAB毕业设计用)
  17. python中时间模块datetime总结
  18. nyoj-506-洗澡
  19. JS生成随机字符,生成一堆高逼格的乱码。。。
  20. 张勇:阿里云是一家云计算产品公司,要坚定走向“产品被集成”

热门文章

  1. 计算等额本本息和等额本金的python代码
  2. seism matlab,去噪方法是什么意思
  3. Windows10家庭版 提升管理员权限
  4. java毕业设计木材产销系统的生产管理模块mybatis+源码+调试部署+系统+数据库+lw
  5. 设计师必看的十部电影
  6. park停车场项目实战
  7. vs2015+opencv在xp下使用的问题
  8. 键盘连不上计算机,电脑键盘连接不上电脑是怎么回事
  9. Antd表单项根据后端返回字段显示错误的校验提示语
  10. 安卓开发环境教程!史上最强vue总结来了,大厂直通车!