问题标签 [soot]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
613 浏览

java - soot如何获取一个类的子类?

我可以通过 获得一个类的超类SootClass.getSuperclass(),但我不知道如何获得它的子类。

我需要先加载子类吗?没有getSubclass()功能。谢谢!

0 投票
1 回答
307 浏览

java - Soot:源文件更改后重新加载类

我正在编写一个 IntelliJ 插件来分析 java 程序代码。因此我使用Soot来编写静态分析。每次用户触发我的插件的分析操作时,我都会VirtualFile像这样获取当前上下文的电流:

当我检查此文件的内容时,所有更改都已应用。在此之后,我正在加载我想在 Soot 中分析的类。

这对我来说非常有效。但现在我的问题是:如果我改变某事。在我的插件的测试实例中并再次触发相同的分析,没有任何变化。

到目前为止我尝试了什么?

我设置了以下选项

我还手动删除了所有课程

像这样:

并再次启动程序。

0 投票
1 回答
3348 浏览

java - 如何使用 Soot 创建控制流图?

有一段时间我一直在努力用Soot创建一个控制流图,我有点迷失在它的教程中。我没有将 Soot 用作 Eclipse 插件,而是尝试将 Soot 用作库或 API。

我想做的是,我有一堆 Java 项目,我想创建/生成这些项目的控制流程图。我还看到 Soot 中有一个功能可以生成“DOT”格式的控制流图,这对我来说也是完全可以接受的。

任何显示如何使用 Soot 创建/生成控制流图的指南或代码示例都会很棒!

0 投票
1 回答
137 浏览

soot - Soot插件和命令行-windows-jdk1.7

我按照此处此处的说明创建了一个简单的插件。

但是,当我从命令行启动 Soot 时出现错误(使用 jar 的完整路径时也会出现类似的错误)

我错过了什么?欢迎任何帮助

0 投票
2 回答
194 浏览

soot - SOOT - CompilationDeathException(和幻影军队)

这是我在 WIndows 10 命令外壳上使用的命令:

当我执行它时,我得到以下输出:

OCLRUler 项目中使用的所有库都包含OCLRUler/libOCLRuler/src. 输出目录包含在 soot 目录中。此外,该项目确实编译(我正在使用它)。该.目录包含所有 soot/jasmin/heros jar。

尽管如此,所有类都被认为是幻像,并且 Soot 编译中止是因为(我猜)它缺少这些类的主体。我的意思是“EvaluatorOCL”(即,仍在猜测,CompilationDeathException 的来源)是一个“幻影类”。

怎么了 ?

我应该在 Soot 的类路径中添加所有包吗?

我尝试了各种命令行表达式——直到我彻底迷路了。有人对此事有线索吗?

非常感谢。爱德华

0 投票
1 回答
156 浏览

java - SOOT 类加载——什么是“级别”?

这里

coffi 的设计要求,为了将某个 C 类提升到 N 级,必须首先将 C 引用的所有类提升到 N-1 级。为了知道 C 引用了哪些类,您需要将 C 提升到 N-1 级。

这些“级别”是什么?

0 投票
1 回答
263 浏览

java - Soot 获取基础类的方法体

我使用 soot 为 java 编写了一个小的副作用检测。它为我自己编写的函数提供了预期的输出。但是对于基本类(java.lang. , java.awt.)它不起作用。

我想用 Soot 分析以下函数:

我期望一个输出,它只是从java.awt.Point返回对象的 x 值,但 Soot 为getX-function提供了以下代码:

我使用以下代码来检测副作用:

函数调用:

我必须手动加载类吗?如果是,我该怎么做?

0 投票
1 回答
1099 浏览

android - 如何构建和运行 Flowdroid 并使用它来生成静态函数调用图?

我希望在使用APK 工具反编译后为android 应用程序中的API 调用生成一个静态函数调用图。我搜索了做同样的方法,我找到了 Flowdroid

我从链接“ https://github.com/secure-software-engineering/soot-infoflow-android/wiki ”下载了Jasmin、Heros、Soot、soot-infoflow、soot-infoflow-android的github 项目。

我还下载了以下内容:

请指导我如何构建它们或从这里开始。此外,用于记录的库的链接似乎不可用。请也帮助我。

0 投票
2 回答
467 浏览

java - 煤烟:场景中没有出现的callgraph!jb申请失败

使用 Soot,我正在尝试构建调用图。据我所知,问题在于,在处理 API 时,没有可用作入口点的主要方法。我更彻底地检查了 Soot 正在加载什么。使用的类是“正确加载的”(我从中打印它们的列表Scene.v().getClasses(),它显示了项目中的正确类(源和测试源)。

现在,Soot 在请求调用图时不断出现相同的异常Scene.v().getCallGraph()

因此,我尝试手动添加入口点,在测试套件中寻找用于该目的的方法。我发现,如果加载了类,则它们的方法不会。这是我使用的片段,在 Soot 的加载类方法的教程中找到:

c.getMethods()不返回任何方法......更多,调用sm.retrieveActiveBody();引发异常:

这适用于几乎所有类(测试类除外)。我究竟做错了什么 ?为什么方法被拒绝?

0 投票
1 回答
155 浏览

java - 来自“类”实例的 jimple 表示

我需要热交换各种类的方法实现(直到运行时的某个时候我才知道它的新实现,并且可能会再次改变)。

ByteBuddy可以很容易地做到这一点,但它(显然)除了拦截它之外对方法做不了太多,这就是它与 ASM 一起提供的原因。

基本用法是

在哪里

正在使用 ASM。

但是 ASM 很乏味,很难阅读和编写更复杂的代码。所以我更愿意使用 Jimple,因为它为 if-stmts 等提供了抽象。

因此,这个想法是从

,以某种方式将其转换为

,在那里转换方法,并以某种方式将其编译回byte[]

stByteBuddy可以重新加载类。

简而言之:

我想SootClass从 a创建一个可转换的Class<?>并将其编译为byte[]我可以传递的 a。

我怎么做?

更新

似乎暗示执行从SootClassto的转换很热byte[],但到目前为止,我还没有找到任何有助于从Classto转换的文档或示例SootClass。大多数示例似乎只在加载类之前对其进行一次检测。