您好,欢迎访问三七文档
例会报告2014.07.08目录•Soot在Prime中的应用•Soot控制流图Soot在Prime中的应用输入ClassJavaJarPrimeSceneSootClassSootMethodBodySootAppAppClassAppMeghodDeclAppMeghodDeclAppTypeload实现接口ConverterStackHistoryConverterHistoryCLusterwekaConverter模式聚类输出DotXmlHistory-CollectionScene•Scene:即场景类,代表完整环境,是各种分析发生的环境。通过场景类可以设置分析对象,如应用程序类、主类及获取信息的过程之间的分析。•在Prime中Scene用来管理被分析的SootClass。•publicSootClassgetMainClass()//获取含有Main方法的类•publicSootMethodgetMainMethod()//获取Main方法Scene•publicStringgetSootClassPath()//获取类路径•publicvoidaddClass(SootClassc)//在ChainSootClass中增加一个类,Chain类似List•publicvoidremoveClass(SootClassc)//从ChainSootClass中移除一个类•publicbooleancontainsClass(StringclassName)//判断ChainSootClass中是否已经存在该类Scene•publicChainSootClassgetClasses()//获取所有的SootClass•publicSootMethodgetMethod(StringmethodSignature)//在获取指定的SootMethod•publicvoidremoveClass(SootClassc)//从ChainSootClass中移除一个类•getApplicationClasses、getLibraryClasses//分别为获取应用类、获取类库类SootClass•代表装入或使用Soot的单一类,即一个Javaclass在Soot中的表示,通常由Scene创建•publicChainSootFieldgetFields()//获取类的所有的属性•publicvoidaddField(SootFieldf)//在ChainSootField增加一个属性•publicvoidremoveField(SootFieldf)//从ChainSootField中移除指定的属性SootClass•publicSootMethodgetMethod(Stringsubsignature)//根据指定的标记获取SootMethod•publicvoidaddMethod(SootMethodm)//向ListSootMthod中增加一条方法•publicSootClassgetSuperclass()//获取超类•publicStringgetPackageName()//获取类的包名SootMethod•代表某个类的单一方法,即一个Java方法在Soot中的表示,它属于SootClass中的一个方法声明,并不包含实际的代码,实际的方法代码属于Body。•publicStringgetName()//获取方法名•publicTypegetReturnType()//获取方法的返回类型•publicintgetParameterCount()//获取方法参数的个数SootMethod•publicTypegetParameterType(intn)//获取指定位置参数的类型•publicBodygetActiveBody()//获取方法的Body对象Body•代表某个方法的方法体,即Java方法的代码属性,Soot用一个Body为一个方法存储代码•publicSootMethodgetMethod()//获取拥有该Body的SootMethod•publicPatchingChainUnitgetUnits()//???•publicListValueBoxgetUseBoxes()//???Soot控制流图•控制流图是对程序中函数逻辑结构的图形化表示•Soot对于多源程序的优化:Soot的中间转换技术•Soot提供了4种中间表示IR(IntermediateRepresentation),来解决基于栈的Java字节码在优化和变换中存在的问题,实现优化。它们分别为Jimple、BAFShimple及Grimp。Jimple中间文件•Jimple文件从程序的源代码中获得程序的结构信息。通过Jimple文件对源程序进行语法分析,可从中获得程序指令节点之间直接控制流传递关系函数调用关系矩阵•Jimple中每一个label对应的控制节点对应的关系都会在邻接矩阵中反应出来,从而得到java程序的调用路径调用路径控制流图图形化输出•Soot控制流图可视化工具soot.tools.CFGViewer利用Soot框架提供的功能,分析类中每个方法的控制流,并生成以DOT语言描述的控制流图。•DOT是一种抽象的图形描述语言,想要控制流图以几何图形的方式显示出来,需要将其转换成可视化图形格式,如gif、svg、ps等。参考文献•《Soot的Java程序控制流分析及图形化输出》李远玲北京系统工程研究所2009年•《基于Soot控制流图的函数调用路径分析》朱绪利北京信息科技大学2012年4月
本文标题:Soot控制流图
链接地址:https://www.777doc.com/doc-3362258 .html