NJU软件分析笔记(1)

课程链接
本次课程主要内容

  1. Compilers and Static Analyzers
  2. AST vs. IR
  3. IR: Three-Address Code (3AC)
  4. 3AC in Real Static Analyzer
  5. Static Single Assignment (SSA)
  6. Basic Blocks (BB)
  7. Control Flow Graphs (CFG)

经典编译器的结构

注意静态分析的作用阶段

NJU软件分析笔记(1)

IR vs AST

为什么在静态分析中采用IR而不用AST,关于三地址码,不过多记录,与编译中的知识一致。

NJU软件分析笔记(1)

Soot软件

Soot是一个很受欢迎的Java静态分析framework GitHub地址。Soot 采用了一种叫做 Jimple的IR,是一种typed 3-address code。
一段Java代码的例子

NJU软件分析笔记(1)
需要了解一下对应的JVM中的调用方法(specialinvoke,virtualinvoke,staticinvoke,interfaceinvoke,dynamicinvoke)
$ 表示soot生成的临时变量。

Static Single Assignment (SSA)技术

作为了解即可

NJU软件分析笔记(1)
SSA的优势和劣势
NJU软件分析笔记(1)

控制流图(Control Flow Graph)分析

与编译中的概念一致,概览如下

NJU软件分析笔记(1)
很重要的一个点是基本块(Basic Block)的定义与划分算法
NJU软件分析笔记(1)
给出这样一段IR,分析基本块的思路很明显,针对带有goto的代码要做额外的审视
NJU软件分析笔记(1)
根据goto的性质,goto的目标地址肯定是一个basic block的leader;指令后面跟着goto的是一个leader。找到所有的leader,那么一个leader到另一个leader之间的
就属于是一个basic block。具体算法如下
NJU软件分析笔记(1)
在上文的IR中运行该算法,可以得到
NJU软件分析笔记(1)
在有了basic block以后,考虑画CFG的算法,很明显针对goto和本来就是顺序的语句可以得到:
NJU软件分析笔记(1)
因此上文的例子可以画出如下CFG,需要值得注意的就是无条件跳转:
NJU软件分析笔记(1)

总结

NJU软件分析笔记(1)

Original: https://www.cnblogs.com/oasisyang/p/16195263.html
Author: OasisYang
Title: NJU软件分析笔记(1)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585679/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JuiceFS 新手必知 24 问

    JuiceFS 是一个创新性的软件产品,很多初次尝试的小伙伴对产品和用法感到很多疑惑,所以为了帮助大家快速理解并上手 JuiceFS,我们整理了24个关于 JuiceFS 经典的问…

    Linux 2023年6月14日
    098
  • vue动画效果和vue组件——day03

    <div id="app"><br> <input type="button" value="&am…

    Linux 2023年6月7日
    078
  • Golang 实现 Redis(8): TCC分布式事务

    本文是使用 golang 实现 redis 系列的第八篇, 将介绍如何在分布式缓存中使用 Try-Commit-Catch 方式来解决分布式一致性问题。 在上一篇文章中我们使用一致…

    Linux 2023年5月28日
    081
  • Redis数据类型

    该文章是对Redis官方文档的翻译 字符串(Strings) 字符串是Redis值的最基础的类型。Redis字符串是二进制安全的,这意味着一个Redis字符串可以包含任何种类的数据…

    Linux 2023年5月28日
    080
  • Docker 打包部署web项目 [Dockerfile方式]

    系统环境 IDE: IDEA 2020.2 Linux: WSL2 Ubuntu 20.04 Docker: 20.10.8 参考资料 博客园: Dockerfile常用指令介绍 …

    Linux 2023年6月14日
    095
  • Redis集群搭建的三种方式

    一、单节点实例 单节点实例还是比较简单的,平时做个测试,写个小程序如果需要用到缓存的话,启动一个 Redis 还是很轻松的,做为一个 key/value 数据库也是可以胜任的 二、…

    Linux 2023年5月28日
    059
  • Docker 安装 MySQL、Redis

    1 Docker 中安装 Redis 1.1 创建目录 在硬盘上创建 redis 的数据目录: mkdir -p /Users/yygnb/dockerMe/redis/data …

    Linux 2023年6月7日
    099
  • ​Linux知识点总结(内附思维导图,建议收藏)

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0101
  • shell脚本执行错误:#!/bin/bash: No such file or directory

    1、问题描述: 执行.sh脚本时控制台报错 : #!/bin/bash: No such file or directory 2、解决办法: cat -A 文件路径 会发现第一行有…

    Linux 2023年5月28日
    0244
  • 0. 西门子 WinCC 组态软件 — 概述

    西门子 WinCC 组态软件 — 概述 1.西门子WinCC各产品线及定位 WinCC是由SIEMENS(西门子)公司开发的SCADA(数据采集与监控)系统,能高效控制…

    Linux 2023年6月7日
    086
  • mycat2 读写分离配置(详解)

    mycat2相对mycat1来说升级还挺多的,但是全网资料太少了,这里尽可能详细的将读写分离说清楚,目前这套配置已经在我司生产环境应用,日UV6W左右,暂时没发现问题。 1.1下载…

    Linux 2023年6月6日
    097
  • Failed to configure a DataSource ‘url’ attribute问题解决

    才写了一行代码又报错了.. *************************** APPLICATION FAILED TO START ********************…

    Linux 2023年6月13日
    078
  • AIX下安装bash

    在AIX系统下,默认是没有安装bash环境的,对于经常操作的维护人员来说,非常不方便,所以下面我们来动手安装bash。 1、确认系统是否已安装bash 方法1:之间敲bash命令,…

    Linux 2023年6月14日
    069
  • 基于AnolisOS8.6安装OceanBase数据库

    网络配置 cd /etc/sysconfig/network-scripts/ ls vi ifcfg-ens33 修改网络配置 TYPE=Ethernet PROXY_METHO…

    Linux 2023年6月7日
    0100
  • Redis阻塞操作实现原理(转)

    原文:https://www.jianshu.com/p/xsMzfn 作者:Haiger 最近一位朋友问到:既然Redis是单线程的工作模式,那像 _BLPOP_这样的阻塞操作又…

    Linux 2023年5月28日
    089
  • Linux下info page指令

    在所有的Unix Like系统当中,都可以利用man 来查询指令或者是相关文件的用法;但是,在Linux里面则又额外提供了一种在线求助的方法,那就是利用info这个好用的家伙啦!基…

    Linux 2023年6月8日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球