当前位置: 首页 > news >正文

什么是完全的静态分析?

在开发安全、可靠和兼容的软件时,完全的静态分析是一个大有裨益的实践方法。在这里,我们将讨论:从静态分析的角度来看,什么使完全的静态分析与众不同?为什么完全的静态分析很重要?完全的静态代码分析是如何运行的?

本文将包含如下几个部分:

  • 什么是完全的静态分析?
  • 完全的静态分析是如何运行的?
  • 为什么完全的静态分析很重要?
  • 如何使用Helix QAC进行完全的静态分析?

什么是完全的静态分析?

完全的静态分析,或称完全的分析,是指分析结果的完整性或“全面性”。对于一款静态分析工具来说,如果声称提供了完全的分析结果,则意味着:如果一个特定的错误、缺陷或漏洞存在于一款软件中,那么该工具将会发出报告。

如果存在或不存在是有争议的,那么将提供某种形式的警告*,这样就不会“漏掉”任何问题。(*注:这些在Helix QAC中被归类为可能存在的问题,如果不需要完全的分析,可以禁用。)

完全的静态分析不同于其他形式的静态分析,其他形式的静态分析结果可能是基于在一定的时间或资源范围内可能发生的状况。

考虑到对程序运行时行为建模需要某些近似值(例如,缺乏对程序输入或操作系统状态的了解),那么完全的静态分析则需要充分甚至冗余地覆盖到这些近似条件(over-approximation)。

近似冗余(over-approximation)确保没有漏报(对于某种特定的漏洞),近似不足(under-approximation)通常优先考虑不存在误报。

其他形式的静态分析没有这么严格,可能同时包含近似冗余和近似不足的情况。

来自完全和不完全的静态分析工具的结果都有可能为程序的特定部分提供良好的健康状况报告,但是完全的静态分析引擎能提供额外的保证,即在得出这个结论时,所有的可能性和所有的路径都是经过验证的。

完全的静态分析是如何运行的?

当提到完全的静态分析时,我们通常考虑形式更复杂的程序间和程序内的控制流和数据流分析,就像在当今最先进的静态分析工具中发现的那样。

控制流和数据流静态分析,不是更简单的代码语法和语义分析,而是通常与检测更复杂的问题有关,例如:

  • 空指针解除引用
  • 数组或缓冲区下溢与溢出
  • 使用未初始化的对象
  • 内存分配和解除分配异常
  • 数值溢出、下溢和环绕
  • 除零
  • 死代码
  • 数据争用、死锁和其他并发冲突

控制流和数据流分析是一项计算密集型任务,因为必须考虑系统的所有可能输入和通过系统的所有可能控制流路径。事实上,用于控制流和数据流分析的暴力详尽算法会导致分析时间呈指数级别,因此很少适用。然而,符号执行(Symbolic Execution)和抽象解释(Abstract Interpretation)算法是更优雅的选择。

根据 Roberto Amadini, Graeme Gange, Peter Schachte, Harald Søndergaard以及Peter J. Stuckey撰写的Abstract Interpretation, Symbolic Execution and Constraints所述,“抽象解释是一个静态分析框架,用于对程序所有可能的运行时状态进行全面的冗余近似(over-approximation)。”

而“符号执行是一个可达性分析框架,试图探索一个程序的所有可能的执行路径。”抽象解释和符号执行在执行期间都以不变量或路径条件的形式维护约束条件,它们决定在不同的数据源条件下哪些路径可能被执行,哪些值可能会出现。

然而,至关重要的是,抽象解释是全面的,但符号执行却不是。

为什么完全的静态分析很重要?

全面性是安全关键型软件系统中的一个重要因素,特别是因为它能保证软件不包含任何要检查的编码缺陷。也就是说,如果一款软件中没有错误,完全的静态分析可以用来证明错误的不存在。

因此,在适用于汽车系统的ISO 26262功能安全(FuSa)标准中,抽象解释分析被明确引用为软件单元验证的方法(表7,方法1i)。

如何使用Helix QAC进行完全的静态分析?

由于能够提供深入和高度准确的分析结果,Helix QAC作为一款值得信赖的静态代码分析工具已经超过30年。Helix QAC能够进行完全的静态分析,一直是需要满足严苛合规要求的监管严格和安全关键行业的首选工具。

然而,为了在您的Helix QAC项目中进行完全的静态分析,还需要做一些设置:

数据流深度(Dataflow Depth)需要设置为最高值(5),这将添加几个-prodoptions,如上面的截图所示。(请参阅QAC或QAC++组件手册中的“分析超时(Analysis Timeout)”部分的讨论:为什么这些“超时(timeout)”设置对于完全的静态分析而言是强制的。)

此外,即使不需要进行完全的静态分析,也可以启用‘df::inter=5’和‘Inter TU Analysis’, 以花费额外的计算成本来减少需要报告的可能存在的问题数量。这些设置的目的是能够支持程序间和程序内分析。

为什么选择Helix QAC进行完全的静态分析

如果您想亲自体验Helix QAC完全的静态分析对代码质量和全面性的影响,立刻注册申请免费试用吧。

“原创内容,转载请标明出处”

相关文章:

  • 如何在ios手机上使用动态代理?
  • 搭建zookeeper集群
  • React生命周期详解
  • 大数据项目中数据倾斜
  • Kafka Consumer源码讲解
  • svg中 path标签的d属性
  • 什么样的数字IC后端工程师能拿到高薪Offer?
  • 计算机组成原理_DRAM和SRAM
  • 两个有序序列的中位数
  • 浅析Android UI——View 的绘制
  • 一文看懂25个神经网络模型,神经网络神经元模型
  • 神经网络模型训练过程,神经网络模型应用实例
  • NR PDCCH(二) SearchSpace
  • Vue2(十二):Vuex环境搭建、Vuex工作原理、几个配置项、多组件共享数据、Vuex模块化
  • CREO图文教程:三维设计案例之齿轮参数化设计(渐开线+拉伸+轴阵列)图文教程之详细攻略
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Android 控件背景颜色处理
  • Centos6.8 使用rpm安装mysql5.7
  • ES6--对象的扩展
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Meteor的表单提交:Form
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 初探 Vue 生命周期和钩子函数
  • 大快搜索数据爬虫技术实例安装教学篇
  • 解析 Webpack中import、require、按需加载的执行过程
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 设计模式走一遍---观察者模式
  • 学习笔记:对象,原型和继承(1)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 自动记录MySQL慢查询快照脚本
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 阿里云ACE认证之理解CDN技术
  • ​你们这样子,耽误我的工作进度怎么办?
  • #、%和$符号在OGNL表达式中经常出现
  • $GOPATH/go.mod exists but should not goland
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (ZT)薛涌:谈贫说富
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (第二周)效能测试
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm高校实验室 毕业设计 800008
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)elasticsearch 源码之启动流程分析
  • (已解决)什么是vue导航守卫
  • (转)负载均衡,回话保持,cookie
  • .form文件_SSM框架文件上传篇
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET企业级应用架构设计系列之结尾篇
  • .net图片验证码生成、点击刷新及验证输入是否正确