当前位置: 首页 > 知识库问答 >
问题:

以编程方式使用Soot分析.java源文件

敖硕
2023-03-14

为了以编程方式分析。java文件,我刚刚开始玩Soot。从我所读到的内容来看,Soot似乎是一个非常强大的源代码分析工具,但我在网上找到的大多数材料都是将其用作命令行工具。

我需要以编程方式从给定目录中的。java文件加载类,构造程序依赖图(PDG)并进行一些程序切片。我仍然不确定是否Soot提供切片,但我可以实现自己一旦我有PDG。

为了开始,我尝试使用下面的代码:

Options.v().set_whole_program(true);
Options.v().set_soot_classpath("...");

SootClass c = Scene.v().loadClassAndSupport("MyClass");
c.setApplicationClass();

CHATransformer.v().transform();
CallGraph cg = Scene.v().getCallGraph();

然而,它不起作用。它在loadclassandsupport调用中停留了几秒钟,然后我的程序突然存在,没有给出任何异常或任何东西。

共有1个答案

龙星辰
2023-03-14

不应使用LoadClassandSupport。改为插入一个“场景转换器”。切片可以通过使用FlowDroid扩展soot来实现。它支持Android和Java代码的切片。

 类似资料:
  • 问题内容: 我需要以编程方式计算给定jar文件中已编译类,接口和枚举的数量(因此我需要三个单独的数字)。哪个API对我有帮助?(我不能使用第三方库。) 我已经尝试过非常棘手的方案,这似乎并不总是正确的。即,我将每个ZipEntry读入byte [],然后将结果提供给我的自定义类加载器,该加载器扩展了标准CalssLoader并将此byte []发送到ClassLoader.defineClass(

  • 问题内容: 我想编写一个程序(最好在Java中),以分析和分析Java堆转储文件(由jmap创建)。我知道已经有很多很棒的工具(jhat,eclipse的MAT等),但是我想从特定的角度分析应用程序中的堆。 在哪里可以阅读有关堆转储文件的结构,如何读取该文件的示例等?找不到有用的搜索内容… 非常感谢。 问题答案: 我不熟悉jhat,但是Eclipse的MAT是开源的。他们的SVN链接可用,也许您可

  • 我想写一个程序(最好是在java中),它将解析和分析一个java堆转储文件(由jmap创建)。我知道有很多很棒的工具已经这样做了(jhat,eclipse的MAT,等等),但是我想从一个特定的角度来分析堆到我的应用程序。 我在哪里可以阅读堆转储文件的结构,示例如何阅读它,等等?没有找到任何有用的搜索... 非常感谢。

  • 问题内容: 我正在使用JDT生成一些类。之后,我想格式化整个ICompilationUnit,就像我在没有选择的打开的编辑器中按Ctrl + Shift + F(源>格式)一样。 高度赞赏JDT中用于以编程方式格式化源代码的API的任何指针。 另外:我像这样尝试过,但是代码没有改变。我在说什么 问题答案: 这可能是一个错误,但是使用Elcipse 4.2.2中的JDK时,有必要创建ICompila

  • 使用 lavas init 创建的模板项目中,在以下场景下都会以编程方式使用 Lavas: server.dev.js 开发环境下的 SPA/SSR 模式。 server.prod.js 生产环境下的 SSR 模式。 可见以编程方式使用 Lavas 的主要场景就是 SSR 模式,而在 SPA 模式下仅仅是供开发服务器使用。因此,如果开发者选择了 SSR 模式,阅读下面的内容将十分有帮助: 如何选择

  • 我想创建一个程序,可以编译一个.java文件到一个.class文件,就像在这个网站上做的:创新网站 null