静态分析
文章平均质量分 95
轻闲一号机
这个作者很懒,什么都没留下…
展开
-
【静态分析】在springboot使用太阿(Tai-e)03
MyBatis 是一款优秀的持久层框架/半自动的对象关系映射,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过XML或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。可以看下边的两种形式的例子.原创 2024-05-21 18:13:02 · 1168 阅读 · 0 评论 -
【静态分析】在springboot使用太阿(Tai-e)02
本文章使用的被分析代码为。原创 2024-05-21 12:06:24 · 1141 阅读 · 0 评论 -
【静态分析】在springboot使用太阿(Tai-e)01
由于spring-boot实现了控制反转与面向切面编程的设计思想,使得程序并非顺序执行,因此很难通过程序入口来顺序分析所有代码。本篇文章旨在从0开始,利用Tai-e来分析spring-boot程序,解决控制反转的问题。原创 2024-05-20 23:42:40 · 989 阅读 · 0 评论 -
【静态分析】软件分析课程实验A4-类层次结构分析与过程间常量传播
此外,为了使得你的过程间常量传播能够正常运行,你还需要实现一个 worklist 求解器来支持过程间数据流分析(虽然在软件分析课程中,我们并没有教过你实现过程间分析的具体方法,但是不必担心,通过本次作业,你会掌握相关的知识和实现方法)。的 entry 节点的 IN fact,我们需要对 2→4 这条边应用 edge transfer,这样使得第 2 条语句的 OUT fact(a=6)转换为 x=6,并最终 meet 结果 x=6 到第四条语句的 IN fact中。该类代表的是程序的过程间控制流图。原创 2024-05-10 22:21:36 · 665 阅读 · 0 评论 -
【静态分析】软件分析课程实验A3-死代码检测
死代码指的是程序中不可达的(unreachable)代码(即不会被执行的代码),或者是执行结果永远不会被其他计算过程用到的代码。去除死代码可以在不影响程序输出的前提下简化程序、提高效率。不可达代码(unreachable code)和无用赋值。原创 2024-05-10 16:57:13 · 973 阅读 · 0 评论 -
【静态分析】软件分析课程实验A2-常量传播和Worklist求解器
在本作业中,Tai-e 对输入类的每个方法进行常量传播分析,并输出分析的结果,也就是每个语句的 OUT fact 所包含的数据流信息(变量的格上对应值)。这是 Tai-e 的 IR 中的一个关键接口,用于表示程序中的所有表达式。这个类的各个子类对应了不同种类的二元表达式,并且每个子类中都有一个内部枚举类型用于表示该类支持的运算符。它的实现是不完整的,在本此作业中你需要完成它。的时候,你要小心地处理每个会被分析的方法的参数。的操作数时,你只需要考虑它是变量的这一种可能,而不用担心它是常量或其它可能了。原创 2024-05-09 23:11:14 · 787 阅读 · 0 评论 -
【静态分析】静态分析笔记09 - 污点分析
关注的是,污点数据是否能流向sink点。或者说,sink点处的指针指向哪些污点数据。原创 2024-04-27 22:31:10 · 872 阅读 · 0 评论 -
【静态分析】静态分析笔记08 - 指针分析 - 上下文敏感
Select(c,l,c':oi,m),c——调用者上下文,l——调用行,c':oi——接收对象(含堆的上下文信息),m——调用函数。:上下文不敏感时,分析常量传播这个问题,由于没有明确调用id()的上下文,会把不同的调用混合在一起,对id函数内的变量n只有一种表示(调用的堆抽象的上下文,导致只有1个o8,把两个上下文调用产生的o8.f指向集合都合并了,得出了o8.f的多余指向的结果。对比1层的调用点敏感和对象敏感,时间和准确性上对象敏感显然更优,这是由面向对象语言的特点所确定的。:牺牲精度,提高速度。原创 2024-04-26 18:20:45 · 836 阅读 · 0 评论 -
【静态分析】静态分析笔记07 - 指针分析基础
因为mthis只和oi的类型对象相关,而可能有pt(x)={new A, new B, new C},使得pt(x)中的所有对象都流向了mthis。因为x可能指向多个对象,就会多次处理ProcessCall(x, oi),可能x中别的对象oj也指向这个目标函数m,已经将这条边加入进去了。WL:Work list,待合并的指针信息,二元组的集合,<指针n,指向的对象集合pts>。:由于指针分析和CG构造互相影响,所以每次迭代只分析可达的函数和语句。:当一个指针的指向集发生变化,必须更新与它相关的其他指针。原创 2024-04-24 11:56:17 · 898 阅读 · 0 评论 -
【静态分析】静态分析笔记06 - 指针分析介绍
所以为保证指针分析可以终止,我们采用堆抽象技术,将无穷的具体对象抽象成有限的抽象对象。也即,将有共性的对象抽象成1个静态对象,从而限制静态分析对象的个数。:指针分析属于may analysis,分析的结果是某指针所有可能指向哪些对象,是个over-approximation集合。:目前流敏感对Java提升不大,不过在C中很有效,本课程分析的是Java,所以重点讨论流不敏感技术。:基本信息(别名分析/调用图),编译优化(嵌入虚拟调用),漏洞(空指针),安全分析(信息流)。),来表示在该点创建的所有动态对象。原创 2024-04-22 12:08:45 · 664 阅读 · 0 评论 -
【静态分析】静态分析笔记05 - 过程间分析
本质是调用边的集合,从调用点(call-sites)到目标函数(target methods / callees)的边。原创 2024-04-20 21:57:57 · 730 阅读 · 0 评论 -
【静态分析】软件分析课程实验A1-活跃变量分析和迭代求解器
Live Variable Analysis 详见。我们已经在 Tai-e 的框架代码中提供了你需要的一切基础设施,包括但不限于:程序分析接口、常用数据结构(如数据流信息的表示)、必要的程序信息(如控制流图)等内容。由此,你就可以便利地在 Tai-e 上实现各类数据流分析了。例如在本次作业中,你要在框架代码中补全一些关键部分,从而实现要求的活跃变量分析与迭代求解器。需要特别注意的是,所有作业文档都只会简要地介绍本次作业中必要的一些 API。原创 2024-04-16 16:43:21 · 880 阅读 · 0 评论 -
【静态分析】软件分析课程实验-前置准备
Tai-e 是一个分析 Java 程序的静态程序分析框架,相比于已有的知名静态程序分析框架(如 Soot、Wala 等),Tai-e 要易学易用很多。Tai-e 提供精炼的 IR,明晰且易拓展的接口,丰富的程序分析算法,直观易懂的框架结构,以及指导性强的文档等。需要注意的是,Tai-e 分为教学版和科研版两个版本,两个版本虽都易学易用,但侧重有所不同。该套实验作业的设计是基于教学版。原创 2024-04-16 16:32:06 · 1047 阅读 · 0 评论 -
【静态分析】静态分析笔记04 - 数据流分析(理论)
定义:给定偏序集(P,∀x∈Sx⊑u, 其中u∈P,则 u 是子集 S 的上界 (注意,u并不一定属于S集∀x∈Sl⊑x, 其中l∈P,则 l 是 S 的下界最小上界:least upper bound(lub 或者称为 join),用 ⊔S 表示。定义:对于子集 S 的任何一个上界 u,均有 ⊔S⊑u。最大下界:greatest lower bound(glb 或者称为 meet),用 ⊓S 表示。定义:对于子集 S 的任何一个下界 l,均有 l⊑⊓S。原创 2024-04-14 11:05:55 · 1097 阅读 · 0 评论 -
【静态分析】静态分析笔记03 - 数据流分析(应用)
给变量 v 一个定义 d(赋值),存在一条路径使得程序点 p 能够到达 q,且在这个过程中不能改变 v 的定义 d。原创 2024-04-11 16:54:22 · 913 阅读 · 0 评论 -
【静态分析】静态分析笔记02 - Intermediate Representation
因为首先要确保这是一份合格的代码,词法正确,语法正确,语义正确,而后再进行分析 non-trivial 的一些属性,而不是在可能编译不通过,运行不起来的程序中去分析这些 trivial 属性。PS:这里可能还是需要看应用场景,应用场景不同,其需求不同,source code 有时确实会比 IR 或者 machine code 表达出更丰富的语义。重用,代码相似性的 field 中,确实存在若干 paper 基于 source code 构建代码相似性。条件跳转和非条件跳转从 A 的结尾到 B 的开头。原创 2024-04-09 22:57:46 · 946 阅读 · 0 评论 -
【静态分析】静态分析笔记01 - Introduction
静态分析的作用包括判断程序是否安全(空指针引用、内存泄漏、信息泄漏等)、增强对项目的理解(调用层次结构)、编译器优化(死代码消除)等。静态分析可以给出的是可靠性(soundness)或完整性(completeness),对应的是误报率(false positives)或漏报率(false negatives)。这也涉及到在确保可靠性的同时,在分析精度和分析速度之间做平衡。Over-approximation主要包括两部分:Transfer functions、Control flows。原创 2024-04-09 10:38:43 · 382 阅读 · 0 评论