SVF系列 | 您所在的位置:网站首页 › idl多线程 › SVF系列 |
1、引子
程序分析是我们开发出高健壮、强安全软件必不可少的步骤。现在的大多数公司,都会在项目或版本发布时,用开源或自研的静态分析软件去扫描一次程序,用以发现平时没发现的bug。据统计,开发人员70%的时间都会用在debug上,所以有一款自动检查bug的工具就可以让程序员把时间花在更有意义的事情上。 这个系列是为了帮助初学者入门的,程序分析是比较抽象的,尤其是各种算法,如果只是学习课本知识的话,很难对算法本身有更深的理解。 现在市面上有很多关于Java的静态分析,比如soot,但是针对C的还是比较少,即使有,也是不成体系的,可能只是完成单个功能的模块。 SVF是一个专门用于C程序分析的框架,通过学习它的算法以及代码实现,能让我们对程序分析有更深刻的理解。 本人有幸成为SVF的MTA工具的开发者之一,并且得到SVF作者的同意,在这向大家讲解这样一款非常不错的C语言静态分析工具。 下面我们就开始SVF之旅吧。。 首先我用一句话概述SVF: SVF 是一款具有高扩展性、低耦合的、基于value-flow的稀疏分析框架,用户可以利用SVF前端求解的变量points-to 信息来定制化自己的静态分析算法。 SVF的框架
总之,SVF是一款低耦合的,具有高扩展性的框架。 这里反复提到了值流图(Value-Flow Graph),至于什么是值流图,可以看我之前的文章论文解读系列–《Flow-Sensitive Pointer Analysis for Millions of Lines of Code》,里面有详细的介绍,以及值流图是如何构建的。SVF: Interprocedural Static Value-Flow Analysis in LLVM也有简单的介绍。 SVF包含但不限于一下技术: 指针分析 Anderson指针分析Steengrad指针分析Anderson的各种变体 DDAMTA 用于分析多线程的静态分析算法,包括线程交错分析,锁变量分析等 检测各种内存错误的算法double-free等。说到这里,SVF还是比较抽象的,后面我们会逐步进行SVF的源码,来看看写在论文里或者写在教科书里的那些算法是如何实现的。 结尾后续的系列会先讲比较重要的代码,以及本人比较感兴趣的代码,其余的源码有空再更。 SVF的源码可以在这里下载: SVF 官方源码 |
CopyRight 2018-2019 实验室设备网 版权所有 |