《SVF Interprocedural Static Value-Flow Analysis in LLVM》阅读笔记

《SVF: Interprocedural Static Value-Flow Analysis in LLVM》阅读笔记

作者:Yulei Sui Jingling Xue

文章介绍了工具SVF,用稀疏分析的最新进展,对C程序进行可扩展的、精确的程序内静态值流分析,许以迭代的
方式进行值流构建和指针分析。SVF接受所有的指针分析产生的points-to 信息,并且建立起程序间内存SSA,从而捕获top-level和address-taken的def-use链,这些value flow 之后可以被利用来支持各种程序分析,如内存泄漏,未初始化变量检测,安全漏洞检测以及污点分析,也可以用来支持更加精确的指针分析。

svf框架

svf是实现在LLVM上的,程序源代码首先被clang编译成字节码文件,接着被LLVM Gold Plugin在链接阶段合并产生一个全程序的.bc文件,接着调用指针分析模块,根据获得的points-to信息,value-flow构建模块将程序置于内存SSA模式从而使得top-level和address-taken的def-use链被激活。

在这里插入图片描述

指针分析

svf指针分析包含三个组件:Graph,Rules,Solver。Graph从一个程序的LLVM IR中提取更高层次的抽象,表明应该在哪里进行指针分析。Rules定义了如何从每个stmt即图上的约束条件获取points-to信息。Solver决定以何种顺序来解决所有的约束。

value-flow图构建

构建规则

在这里插入图片描述

Copy:q流向p.

PHI:v1,v2流向v3.

Load:类似于p=(*q).o,o流向p.

Store:类似于(*p).o2=q.o1,q流向o2,o1流向o2.

Call:调用点(r=f(…p…)),被调用函数(f(…q…){return x}),这里p是实参,q是形参,所以p流向q,返回值x流向r。另外两个没看懂(我太菜了)

总结:

除了上面说到的两种分析,文中还介绍了source-sink分析,加速动态分析以及程序的调试方法等。

此外,svf源码在github上已经开源(https://github.com/svf-tools/SVF),本人最近也在学习源码,欢迎交流呀!邮箱:2714085031@qq.com

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值