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)

大家都在看

  • PicGo图床设置

    PicGo图床设置 介绍 PicGo是一款开源的图床管理工具,是可以快速的上传图片并且获得图片的URL链接的工具。目前支持Windows和macOS平台,可以方便的进行拖拽、复制粘…

    Linux 2023年6月6日
    0122
  • Linux系统调用接口

    Linux系统调用接口 进程控制 系统调用 描述 fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 终止进程 _exit 立即终止…

    Linux 2023年6月13日
    0108
  • ASP.NET Core 发布到Linux需要注意的地方

    ☆☆☆ 共同学习,欢迎拍砖;转载请注明出处,谢谢。欢迎关注我的公众号:闲聊编程。☆☆☆ Original: https://www.cnblogs.com/FlyLolo/p/11…

    Linux 2023年6月7日
    098
  • redis之SDS

    SDS:的优点1.获取长度复杂度为O(1)2.避免strcat内存重分配(可能涉及系统调用), 通过[预分配策略]和[惰性空间释放]实现 3.以二进制存储,主要是安全设计,若存储的…

    Linux 2023年5月28日
    092
  • Kubernetes服务发现之Service详解

    一、引子 Kubernetes Pod 是有生命周期的,它们可以被创建,也可以被销毁,然后一旦被销毁生命就永远结束。通过 ReplicationController 能够动态地创建…

    Linux 2023年6月14日
    099
  • VMware ESXi 7.0 U2 SLIC 2.6 & Unlocker 集成 Intel NUC 网卡、USB 网卡和 NVMe 驱动

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    Linux 2023年5月27日
    0103
  • linux-0.11分析:进程初始化函数init(),第三部分,fork创建第二个进程,第十四篇随笔

    第三部分,fork创建第二个进程 [引用github这个博主 多多支持][ https://github.com/sunym1993/flash-linux0.11-talk ]先…

    Linux 2023年6月7日
    0220
  • 【总结】瞬时高并发(秒杀/活动)Redis方案

    1,Redis 丰富的数据结构(Data Structures) * 字符串(String) – Redis字符串能包含 任意类型的数据 一个字符串类型的值最多能存储 …

    Linux 2023年5月28日
    090
  • Linux网络服务之部署YUM仓库

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 1 YUM简介 1.1 YUM简介 CentOS使用yum和dnf 解决rpm的包依赖关系。 YUM:rpm的前端程序,可解决软…

    Linux 2023年5月27日
    0123
  • Redis做Mybatis的二级缓存

    基于spring boot项目的前提下,使用redis数据库做mybatis的二级缓存。 Redis做mybatis的二级缓存 作用提升速度,保证多台服务器访问同一数据库时不会崩注…

    Linux 2023年6月7日
    0119
  • Spring Boot 项目部署到 Linux服务器

    1.首先将SpringBoot项目打包成JAR包,然后通过FTP工具上传到Linux,执行如下命令: java -jar xxx.jar & 该命令执行后,启动jar,一旦…

    Linux 2023年6月14日
    076
  • [Git专题] 环境搭建

    环境搭建 在正式使用 Git 之前,首先应当安装 Git 并完成一些基础配置,本章内容就教大家在 Ubuntu 和 CentOS 上安装 Git 的方法。 如果你使用的是基于 De…

    Linux 2023年5月27日
    0100
  • Linux NTP服务配置

    bash;gutter:true; 外部ntp服务器地址:0.cn.pool.ntp.org 内部ntp服务器地址1:192.168.57.200 内部ntp服务器地址2:192….

    Linux 2023年6月13日
    052
  • 008 Linux 文件查找 find

    在 Linux 系统,find 毫无疑问是最强的文件查找工具。find 一般会与其他命令结合,将查找到的结果作为参数传入到后置命令中,进行删除、统计、复制迁移等操作。 find /…

    Linux 2023年5月27日
    0103
  • Ubuntu下搭建apache2+GGI环境

    参考:https://blog.csdn.net/nanfeibuyi/article/details/108551159 就先记录步骤吧 Original: https://ww…

    Linux 2023年6月8日
    096
  • 【Python】AttributeError: ‘Rotation’ object has no attribute ‘from_dcm’

    报错的代码如下: from scipy.spatial.transform import Rotation def dcm2euler(mats: np.ndarray, seq:…

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