基于soot的java方法名生成报告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于soot的java方法名生成报告相关的知识,希望对你有一定的参考价值。

0.生成XML格式文件

笔者使用soot将java文件解析生成xml格式文档,具体操作流程不再赘述。本文讨论执行结果的用途。笔者第一次采用的java文件如下:文件名为test.java

技术分享

 

用soot解析后,生成如下所示的XML文件:

 

技术分享 

   1.用xsl样式表链接XML文档

大家很容易看到上文是一个常见的xml文件,然后我使用Altova XMLSpy工具,编写XML文件对应的XSL文件,把 XSL 样式表链接到 XML 文档。即可生成如下所示的方法名列表,文件以html格式的方式预览:

 

 技术分享

2.第二组实例测试

笔者紧接着按这种方法测试另外一个java文件,与上个不同的是,这个java文件中有三个类

 技术分享

接下来将该java文件转化成xml文件时,笔者意外的发现生成的xml文件不是一个而是三个:

 技术分享

 

接下来笔者随意挑选一个XML文件提取方法名,以第一个mycode.forst.xml为例,结果如下:

 技术分享

可以看到这几组方法都归属于同一类即mycode.first

而第二个XML文件也是这样:

 技术分享

   3.0总结

   从上面两个例子可以看到soot在解析java文件时,是将整个java文件分成类来分别解析的。每个类文件中再解析方法。由于笔者的知识所限和XML文件的局限型,方法之间的关系很难通过xml文件解析出来。但是,经过自己的查询和尝试,特总结出以下几点对自己工作不足之处的解决办法。

 

  3.1总结

  java是由类封装而成的,类与类之间的关系,在以上实例中,没有很好地反映类与类之间的关系,而将类之间的依赖关系转化出来的一个好的办法就是UML图。如下:

 技术分享

3.2总结

在上面的实例中,使用soot将java源码转化成XML文件不能很好地反应类中各个内部的调用情况,解决这个问题的一个方法是:采用soot生成CFGs即控制流图。以上文的test.java为例,使用soot.jar将文件解析成控制流图,如下所示,这样就很好地反映出函数类部的调用路径:

 

技术分享 

3.3总结

下一步工作和方向:

在以上成果的基础上,笔者会进一步丰富自己的用例。然后找到java类中各个方法之间的关系。思路就不再赘述了。

如果图片不清晰的话大家可以下载PDF格式的:

链接: https://pan.baidu.com/s/1mhXUCac 密码: sq27

以上是关于基于soot的java方法名生成报告的主要内容,如果未能解决你的问题,请参考以下文章

soot 静态分析框架Soot lambda 构建

soot 静态分析框架Soot lambda 构建

Soot生成控制流图

Soot生成代码控制流图

Soot 静态分析框架Soot的核心

Soot 静态分析框架Soot的核心