《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

《SVF Interprocedural Static Value-Flow Analysis in LLVM》阅读笔记相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  7. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  10. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

最新文章

  1. 《树莓派Python编程指南》—— 1.3 树莓派快速指南
  2. 关于程序猿的学习方法的一些总结
  3. ASP.NET MVC 生成简单的 xml 权限结构
  4. .NET Core 控制台应用程序使用异步(Async)Main方法
  5. ZZULIOJ21级新生周赛(1)——命题人:朱会东老师——2822: 探姬粉丝众多
  6. js禁止退出当前页面
  7. windows bat 命令之%~dp0
  8. Drool学习记录(二) Kie Session、Truth maintenance
  9. visio中画细箭头
  10. 几何公差基础知识之垂直度
  11. 经典语音降噪方法-谱减法
  12. 安卓开发指南!程序员如何自我学习和成长?终获offer
  13. One Step By One Step 解析OkHttp3 - Dispatcher (一)
  14. 线上平台/线下渠道,VR营销渠道大盘点
  15. Hutool XML 转JSON 后 parseArray踩坑
  16. 如何往虚拟机里面复制文件(末尾附带视频教程)
  17. matlab如何处理矩阵中的NaN
  18. 程序员没带笔记本电脑面试,手撸代码,HR激动喊到:老铁,666
  19. 电机磁链和反电势系数关系
  20. C# 矩阵和向量的相关计算(一)

热门文章

  1. AfterEffect(AE)插件-常规功能开发-放大缩小图层-js脚本开发-AE插件
  2. thinkphp 6.x 数据库增删改查
  3. Flutter 下拉刷新之RefreshIndicator
  4. 工商银行莆田分行项目分享 触摸屏软件
  5. java套件下载_iBATIS官方下载
  6. 通达信期货ctp交易接口进行封装对接?
  7. C盘满了怎么办?电脑C盘扩容图文教程
  8. Linux死机解决办法
  9. 编程时的编码、编码解码、编码乱码问题(ASCII、GBK、Unicode、UTF-32、UTF-8)
  10. 倍福TwinCAT(贝福Beckhoff)基础教程2.1 TwinCAT常见类型简介