SVF系列 您所在的位置:网站首页 idl多线程 SVF系列

SVF系列

2023-09-16 10:59| 来源: 网络整理| 查看: 265

1、引子

程序分析是我们开发出高健壮、强安全软件必不可少的步骤。现在的大多数公司,都会在项目或版本发布时,用开源或自研的静态分析软件去扫描一次程序,用以发现平时没发现的bug。据统计,开发人员70%的时间都会用在debug上,所以有一款自动检查bug的工具就可以让程序员把时间花在更有意义的事情上。

这个系列是为了帮助初学者入门的,程序分析是比较抽象的,尤其是各种算法,如果只是学习课本知识的话,很难对算法本身有更深的理解。

现在市面上有很多关于Java的静态分析,比如soot,但是针对C的还是比较少,即使有,也是不成体系的,可能只是完成单个功能的模块。

SVF是一个专门用于C程序分析的框架,通过学习它的算法以及代码实现,能让我们对程序分析有更深刻的理解。

本人有幸成为SVF的MTA工具的开发者之一,并且得到SVF作者的同意,在这向大家讲解这样一款非常不错的C语言静态分析工具。

下面我们就开始SVF之旅吧。。

首先我用一句话概述SVF:

SVF 是一款具有高扩展性、低耦合的、基于value-flow的稀疏分析框架,用户可以利用SVF前端求解的变量points-to 信息来定制化自己的静态分析算法。

SVF的框架

在这里插入图片描述 SVF的大体框架包含:

通过LLVM前端将C源码转化为IR执行用户指定的指针分析,其中最主要的是Anderson指针分析集,里面包括了很多Anderson的变体,后面讲算法的时候会慢慢解释。在求指向集时,SVF会建立变量的约束图,在约束图上进行指针分析的约束求解。利用得到的指向集来构建value-flow,值流图构建完后,又可以用于更加精确的指针分析。同时,值流信息也可以用于用户自定义的静态分析算法的输入。

总之,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 实验室设备网 版权所有