基于Soot控制流图的函数调用路径分析

合集下载

Soot的Java程序控制流分析及图形化输出

Soot的Java程序控制流分析及图形化输出

集合的流图可以表示为: 。 在图中一个结点 b 可以有多 个后继结点,这样的结点被称为分支结点。假设表示 结点的后继集合,形式上可以表示为:
Succ(b ) {n N | e E 其中 e b n} b n 表示 b 结点到结点 n 的一条边。
在图中一个结点也可以有多个前驱结点,这样的 结点称之为汇合结点。若用 Pr ed (b) 表示结点 b N 的 前驱集合,则其形式上可表示为: Pr ed(b) {n N | e E 其中 e n b} 2.2 Soot 的控制流表达方法 Soot 中有两种类型的控制流图,UnitGraph 和 BlockGraph。BlockGraph 是基本控制流图,结点由 基本块组成;UnitGraph 的结点是 Units。两种类型 图的形式化表示是相通的。UnitGraph 的优点之一是 简化了控制流图,没有了基本块的概念,使用它可以 简化传统 的和非 传统的 固定点 数据流 分析 (fixed point data flow analyses)的实现。它的主要缺点是 由于没有基本块,增加了分析的时间开销。 UnitGraph 和 BlockGraph 都需要实现 DirectedGraph 接口。该接口定义的方法可获取下列信息: 图的入口结点和出口结点;一个给定结点的前驱结点 和后继结点;一个以某种未明确规定的顺序和结点数 在图上进行迭代的迭代器。 在此基础上可以开发对任意 DirectedGraph (有 向 图 ) 进 行 处 理 的 方 法 。 事 实 上 UnitGraph 和 BlockGraph 都是抽象类,Soot 提供了若干可将这些 抽象类实例化的子类,如 Complet eUnitGraph , BriefUnitGraph , CompleteBlockGraph 和 Brief BlockGraph 等。Soot 在包 soot.toolkits.graph 中 提供了这些不同类型控制流图的实现。 2.3 Soot 的控制流图的实现 Soot 提供了一个基础结构用于审查和修改以控制 流图形式出现的 Unit 链。这里主要描述结点为 Soot Units 的控制流图的实现。 UnitGraph 是这类控制流图 的基类,为构建控制流图提供了基本功能部件。通过它 可 以实 现三 种不 同类 型的 控制 流图

带控制流的静态函数调用分析方法

带控制流的静态函数调用分析方法

[ ywod ]s t a ssc nrl o fnt ncl po rm pi zt n Ke r s t i a l i; o t w;u c o a ; rga o t ai a cn y of l i l mi o D0I 1.9 9jsn10 —4 82 1.90 6 : O3 6 /i 0 03 2 .0 10 .1 .s
I sg t h u c i n c l fo g a h g n r t d b u i g h l w t o a o n y r v a h a l o d r o h u c i n , uta s e p t n i h ,t e f n to a l l w r p e e a e y sn t e l e me h d c n n t o l e e lt e c l r e f t e f n t s b lo h l o o u d rt n h o l x t ft o i ft e p o r m .W i h ep o h e f n to a lfo g a h, h o e r a e a e t rm a t r f n e s a d t e c mp e i o y he l g c o r g a h t t e h l ft e n w u c i n c l l w r p t e c d e d rh sa b t se y o h e
第3 7卷 第 9期
\( . ,1 ) 37






2 1 年 5月 01
M a 2 1 v 01
No. 9
Co mpu e g n e i g t rEn i e rn
“ 高基 ”专 题 ・ 核
文章编号:1 o_ 2( l0-04—0 文献标识码: o _3 8019.o7 4 0 4 2 ) A

Soot的Java程序控制流分析及图形化输出

Soot的Java程序控制流分析及图形化输出

Soot的Java程序控制流分析及图形化输出
李远玲;陈华;刘丽
【期刊名称】《计算机系统应用》
【年(卷),期】2009(018)010
【摘要】Soot是一个Java编译优化框架,可以利用它实现Java字节码程序的数据流分析和控制流分析.在深入分析Soot控制流生成机制的基础上,详细叙述了利用Soot分析Java类的控制流并生成其控制流图的方法和过程,同时提出了将Soot 生成的抽象的控制流图进行图形化输出的方法.
【总页数】5页(P88-92)
【作者】李远玲;陈华;刘丽
【作者单位】北京系统工程研究所;北京系统工程研究所;北京系统工程研究所【正文语种】中文
【相关文献】
1.控制流程的图形化表达方法 [J], 韦根原;金秀章;刘延泉;黄保国
2.基于Soot控制流图的函数调用路径分析 [J], 朱绪利;牟永敏;张志华
3.基于Soot的Java程序竞争静态检测工具设计 [J], 宋东海;佟晶
4.用开关量输出控制流量的带偏差调节方式 [J], 沈江
5.一种并发Java程序控制流模型 [J], 卢超;卢炎生;毛澄映
因版权原因,仅展示原文概要,查看原文内容请购买。

软件测试:Soot生成控制流图

软件测试:Soot生成控制流图

软件测试:Soot⽣成控制流图Soot⽣成控制流图【安装遇到的问题】1)jdk1.7安装,配置环境变量后报Error:could not open ‘C:\Program Files\Java\jre1.7.0_80\lib\amd64\jvm.cfg'.解决⽅法:把环境变量Path⾥⾯的%JAVA_HOME%/bin放在最前⾯,若没有%JAVA_HOME%/bin,则创建。

2.把soot-2.5.0.jar导⼊项⽬,并复制粘贴到项⽬的bin⽬录,然后命令⾏进⼊项⽬bin⽬录,使⽤下⾯的命令⽣成dot⽂件。

【sootTest为包(package)名,Triangle为类名】java -cp soot-2.5.0.jar soot.tools.CFGViewer --soot-classpath .;"%JAVA_HOME%"\jre\lib\rt.jar sootTest.Triangle执⾏后在项⽬bin⽬录下会⽣成sootOutput⽂件夹,⾥⾯有⽣成的dot⽂件,把⽣成的dot⽂件重命名。

4.命令⾏进⼊sootOutput⽬录下,使⽤dot -Tpng Triangle.dot -o Triangle.png命令,来可视化dot⽂件。

⽣成Triangle类的控制流图:⽣成Test类的控制流图:5.测试⽤例Triangle.javapackage sootTest;public class Triangle {public String check(int a, int b, int c){String result = "";if(a == b && b == c){result = "该三⾓形为等边三⾓形";}else if(a == b || a == c || b ==c){result = "该三⾓形为等腰三⾓形";}else if(a + b > c && a + c > b && b + c > a){result = "该三⾓形为不等边三⾓形";}else{result = "这不是⼀个三⾓形";}return result;}}Test.javapackage sootTest;public class Test {private double num = 5.0;public double cal(int num, String type){double temp=0;if(type == "sum"){for(int i = 0; i <= num; i++){temp =temp + i;}}else if(type == "average"){for(int i = 0; i <= num; i++){temp = temp + i;}temp = temp / (num -1);}else{System.out.println("Please enter the right type(sum or average)"); }return temp;}}。

带控制流的静态函数调用分析方法

带控制流的静态函数调用分析方法

带控制流的静态函数调用分析方法陈忠湘;詹瑾瑜;郝宗波【摘要】提出一种带有控制流的静态函数调用分析的方法,通过建立模型,对源程序进行静态分析,得到程序中的控制流信息和函数调用信息.和已有的静态函数调用关系图分析工具calltree和Source Insight相比,该方法生成的函数调用流图不仅能展现函数间的调用次序,还可以了解程序设计的逻辑复杂度,有助于代码阅读和分析人员更快更好地理解程序结构以及设计流程,并为分析程序控制条件、设计路径覆盖测试用例和进行程序优化奠定基础.%This paper puts forward a new method for the static function call analysis with control flow, by which can get the information of control flow and function call through creating a model to carry out static analysis of the source paring with existing tools like calltree and Source Insight, the function call flow graph generated by using the new method can not only reveal the call order of the functions, but also help to understand the complexity of the logic of the program.With the help of the new function call flow graph, the code reader has a better mastery of control flow of the program and a better understanding of the structure and design of the program.It also provides the basis of convenience to analyse control conditions of the program, design path coverage test cases and optimization for the program.【期刊名称】《计算机工程》【年(卷),期】2011(037)009【总页数】4页(P47-50)【关键词】静态分析;控制流;函数调用;程序优化【作者】陈忠湘;詹瑾瑜;郝宗波【作者单位】电子科技大学软件学院,成都,611731;电子科技大学软件学院,成都,611731;电子科技大学软件学院,成都,611731【正文语种】中文【中图分类】TP3141 概述在阅读和分析某些大工程或开源代码时,如果不借助一些源代码阅读工具,将非常耗时、费劲。

soot 原理

soot 原理

soot 原理Soot 原理介绍在软件分析与优化领域,[Soot]( 是一种广泛使用的开源工具,用于处理与分析Java和Android字节码。

它提供了丰富的功能和灵活的接口,使得开发人员能够更好地理解和优化代码。

本文将逐步深入解释Soot的工作原理。

1. 词法分析和语法分析•Soot 首先将输入的Java或Android源代码转换成抽象语法树(AST)。

•它执行词法分析和语法分析的过程来解析源代码,并生成相应的AST表示。

•通过词法分析和语法分析,Soot能够了解程序的结构和语法。

2. 控制流图和数据流分析•接下来,Soot基于AST构建程序的控制流图(CFG)。

•控制流图展现了程序中方法之间和语句之间的控制依赖关系。

•利用数据流分析,Soot可以分析程序中变量的引用、定义、修改以及流动情况。

3. 字节码生成和优化•在分析过程中,Soot将目标程序转换为中间表示(IR),即Java字节码。

•Soot提供了一套丰富的IR操作工具,可以进行字节码级别的优化。

•这些优化可能包括常量折叠、无用代码删除、方法内联等。

4. 数据流分析和指向分析•Soot在字节码级别进行数据流分析,以确定程序中变量的有效值范围和可能的取值。

•指向分析用于确定对象引用的指向,包括方法调用和字段访问等。

•这些分析是Soot中最重要的功能之一,用于静态分析和优化。

5. 执行模拟和路径选取•Soot支持执行模拟和路径选取,以模拟程序执行过程并从中提取有用信息。

•执行模拟可以检查程序的执行路径、变量值和程序行为等。

•路径选取可以根据特定的需求选择感兴趣的执行路径进行分析。

6. 反编译•在需要时,Soot还可以反编译字节码,将其转换回Java源代码形式。

•这对于理解程序或检查优化效果非常有用。

以上是对Soot工作原理的一个简要介绍。

通过Soot,我们可以对Java和Android应用程序进行深入的静态分析,优化和模拟。

它提供了广泛的功能和灵活的接口,使得开发人员能够更好地理解和改进代码。

Soot控制流图

Soot控制流图
• public void addMethod(SootMethod m) //向List<SootMthod>中增加一条方法
• public SootClass getSuperclass() //获取超类
• public String getPackageName() //获取类的包名
8
SootMethod
• public int getParameterCount() //获取方法参数的个数
9
SootMethod
• public Type getParameterType(int n) //获取指定位置参数的类型
• public Body getActiveBody() //获取方法的Body对象
5
Scene
• public Chain<SootClass> getClasses() //获取所有的SootClass
• public SootMethod getMethod(String methodSignature) //在获取指定的SootMethod
• public void removeClass(SootClass c) //从Chain<SootClass>中移除一个类
10
Body
• 代表某个方法的方法体,即Java方法的代码属性,Soot用一 个Body为一个方法存储代码
• public SootMethod getMethod() //获取拥有该Body的SootMethod
• public PatchingChain<Unit> getUnits() //???
• 在Prime中Scene用来管理被分析的SootClass。 • public SootClass getMainClass()

基于函数调用路径关联分析的缺陷定位方法研究

基于函数调用路径关联分析的缺陷定位方法研究

基于函数调用路径关联分析的缺陷定位方法研究刘丹凤;牟永敏【期刊名称】《计算机应用研究》【年(卷),期】2016(33)8【摘要】缺陷关联使得目前的缺陷定位方法面临着严峻挑战,为了快速准确定位软件缺陷,保证软件产品质量,对定位方法的改进势在必行。

基于函数调用路径(function calling path,FCP)技术,把缺陷定位的整体粒度由语句级提升到函数级。

依据失效原理和 FP-树分析缺陷关联,逐步缩减缺陷定位问题空间为“执行路径—路径节点—节点语句”,获得缺陷关联拓扑图,局部细化缺陷函数到细粒度,并提出了基于函数排名的评价方法。

实验结果表明,FCP 缺陷定位方法可有效缩减查找缺陷时的代码审查范围,提高软件缺陷定位的精度和效率。

该方法为基于路径分析的缺陷定位提供了理论依据和实践方法,并保证测试的安全进行。

%The current fault localization methods face with severe challenges brought by faults correlation,and it is urgent to improve the related study methods for quickly and accurately locate the software fault and guarantee the software product quali-ty.Based on the technology of FCG,this paper improved the fitness of location from sentences to functions.Based on the fail-ure mechanism and the FP-tree analysis,this paper gradually reduced the problem space to “executing path-path node-node”, and obtained the topological graph of faults to local refinement fault function and designed evaluation method based on the function ranking.Experimental results show that the FCP method can effectively reduce the range of codereview in searching faults,improve the precision and efficiency of software fault localization.The method provides a theoretical basis and practical method for the fault localization based on path analysis,and guarantees the safety of the test.【总页数】8页(P2363-2370)【作者】刘丹凤;牟永敏【作者单位】北京信息科技大学计算机学院,北京 100101;北京信息科技大学计算机学院,北京 100101【正文语种】中文【中图分类】TP311.53【相关文献】1.复杂系统中不可达函数调用路径检测方法研究 [J], 潘璐;牟永敏;张志华2.基于函数调用路径的回归测试用例选择排序方法研究 [J], 郑锦勤;牟永敏3.基于函数调用图的Android恶意代码检测方法研究 [J], 李自清4.面向Python的函数调用路径静态提取方法研究 [J], 孙冉;牟永敏;沈美娥5.函数调用路径测试用例自动生成的方法研究 [J], 沈晴;牟永敏因版权原因,仅展示原文概要,查看原文内容请购买。

基于控制流图的测试数据生成算法

基于控制流图的测试数据生成算法

基于控制流图的测试数据生成算法
柏森;朱修彬
【期刊名称】《软件导刊》
【年(卷),期】2007(000)003
【摘要】基于进化算法的进化测试就是一种有效的测试数据自动生成技术。

提出了一种基于控制流图的测试数据生成算法,根据控制流图映射出所有可能的执行路径,然后根据不同的路径所形成的适值地形的导向进行搜索。

【总页数】2页(P109-110)
【作者】柏森;朱修彬
【作者单位】中国地质大学(武汉)计算机学院;西安电子科技大学湖北武汉430074;陕西西安710000
【正文语种】中文
【中图分类】TP301.6
【相关文献】
1.一种用于类的数据流测试中构造控制流图的算法 [J], 季秀兰
2.程序控制流图自动生成的算法 [J], 张雁;林英
3.基于蚁群算法的多路径覆盖测试数据生成 [J], 廖伟志;夏小云;贾小军
4.基于改进遗传算法的模糊测试数据生成方法研究 [J], 薛峰
5.基于卡尔曼滤波器适应性PSO算法的测试数据生成方法 [J], 王晔;吕学伟
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1- 7 0 2 0 -1
2 6
驾京 市 学科 与研 究生 教 育 基 金 ( O1 014224 000 38) P×M2 2 0



t N 程 类 、主类及 获取信息 的过程 问之间的分析圈 So nx ) ;ot — ei 表示 。其 中 , 为 节点 集 , 序 中的每 条语 句对 Cas l :代表装 入 或使用 So的单 一 类 ;ot to : s ot So hd 代 应 图 中 的一 个 节 点 ; 边 集 ,= f n , > n , Me E为 E < l2 I l n 表某 个类 的单 一方 法 ;otil:代 表某 个类 的成员 n SoFe d 2∈N n 执行 后 , 且 1 可能 立 即执 行 nl et 和nx 2;nnr ei y t 字段 ;oy代表某 个类 的方 法体 。 Bd:
多源 ( laa 编译 器 ) 生 的 字 节 码 , 为 类 文  ̄ jvc l 产 作
很 大份额 , 同时也X jv程 序高 效准 确 的测试 提 出 了 件输入 NSo。ot 进行 变换 优化 ,  ̄a a otSo对其 实现类 文件 的
很大挑 战 。 控制 流图是对程 序 中函数 逻辑结构 的图形 优化 , 图 1 示 。优化 后 的程 序可 以在任 何标 准 的 如 所 化表示 。在控 制流 图基 础上对 函数 调用路 径的分 析 , Jv虚拟机上执行。So aa ot  ̄架提供 了一组用于分析和 对Jv程序 的分析 、 试 和维护 发挥 着重要 的作 用 。 aa 测 变换 中间表 示 法 以及 ~ 组用 于 直 接 优化 Jv字 节 码 aa
paak , 0吼 a《 e . hu z xuli. Test:
Jv字 节码 为基 于栈 的代 码 , 优 化实 现 的角度 点 F 完整 路 径 , 别 为 :I< 1G , 8 ,2 < , aa 从 的 分 P = G , 2 G >P = G1
来说 , 不适 于 中间表示 法 。它有 以下 的局 限性 :1 并 ()
提供 了 多种 字节码 分 析 和变换 功 能 ,可 以快捷 地 实 特定程 序 的分析 。
现程 序 的分析 、编译 优化 及 变换 等 ,其最 新 版本 为
S o241】 o t..[。 ]
测 试覆 盖是 对 测试 完 全程 度评 测 为 基于 代码 的测 试 覆 盖 。 码覆 盖方 法 的一条严 格 的准则 就是路 径覆 盖 , 代 它可 以通 过覆 盖率 的数 据 , 测测 试 工作 是否 充 分 , 检
优 篓
最大程度保证代码覆盖率 , 查找测试的弱点环节 , 从 而指 导设 计者 开 发测试 用 例 以增 加覆 盖率 ,有效 地
提高测 试 质量 。

11 o t 基 本 数 据 结 构 . S o的

图1 S o对 于 多源程 序 的 优 化 ot
So的数 据结 构 采用 面 向对 象 的思 想 , 设计 到 ot 被

JF S UNP 对程序 调用路径 的分析更加 准确 、 , 高效 。
关键词 : 调用路径 ; o;v ; S taa测试; F NP o i IU S
Jv技 术 以其 通 用 性 、 台无 关 性 、 aa 平 高效 性 等 特 架用 于Jv字 节码 的优化 和变 换 。 aa
征, 吸引 了众 多软 件 开发者 , 占有 了软 件 开发行 业 的


数据通信

2 24 01 .
基于S 0控制流图的函数调用路径分析术 0t
朱 绪利 牟永敏 张志华 ( 北京信息科技大学 北 京1 0 0 ) 0 1 1 摘 要 :每 个应 用 系统 中存在 多条基 于 函数 的调 用路 径 , 这些路 径 的准确提 取对 于程序 的理 解 、 测试 和
12 S o的 中 间转换 技 术 . o t

分别 为程 序 的入 口和 出 口节点 同 。 图3 为一 段简单 的代 码,程序 有 3 条从 起点 s 终 到
G3, >, 3=< , , G5, G8 >, G8 P G1G3 G4, G6, P4= <G1G3 G4, , , G7, G8 >。
1 S o技 术 分 析 ot
易于使 用和通 用 的地方 。它主要 包括 以下 内容 :
cn : 代 是各 种 分 析 发生 的 S o 供 的Jv字 节码 优化框 架 ,既可 以作 为独 See 即场景 类 , 表完 整 环 境 , ot 提 aa 立 工具 用 于类 文件 的优化 和 检查 ,也 可 作 为开发 框 环境 。通 过 场景类 可 以设 置 分析 对象 ,如应 用 程 序
S o是 Mc i大 学 的 S b 研 究 小 组 于 19 年 开 的A I。So的扩展 机 制 以Pc为 中心 , ot GI I al e 96 P ̄ ot ] ak 每个 Pc 中 ak
发的J a a 字节 码工具 , 目标是开发能够更快 、 v 其 更好 包括 若干 个变 换 。用户 可 以根 据需 求 自行 设计 新 的 地理解 与 执行Jv程序 的工具 。 o t 全用Jv实 现 , 变换 , 将 其 加入 N So的调 度执 行 过 程 中 , aa So 完 aa 并 ot 以实 现
维护起 着重要 的作用 。文章利 用开源的Jv4序 编译优 化框 架一 ot对j a aa ̄ So, a 程序 的数据 流及控 制流进 行分析 , v
提 取 函数 间关联 信 息写入 中间文件 , 并对 文件 中的数据进 行 了分析 , 阐述 了程序 函数调 用路 径 生成 的流程 及 S o的优 点 。最 后 通过 实验 验 证 ,相 比其他 程序 调 用分 析软 件 ,基 于S o调 用路 径 分 析 的软 件 测 试 工 具 ot ot
相关文档
最新文档