问题标签 [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 投票
0 回答
1041 浏览

java - Java中布尔表达式的二叉表达式树库的建议

我正在使用Soot在 Java 中进行一些非常简单的程序分析/转换,我发现自己需要做一些简单的布尔表达式组合。因此,例如,在我的分析过程中,我将有一个表达式 like(a < 25) && (b >= 10)并且我想(a >=-10)通过 OR 运算符加入该表达式以获得完整的表达式,例如(a >=-10) || (a < 25) && (b >= 10). 基本上,只需将两个布尔表达式树组合成一个表达式。我可能还希望自动将表达式树转换为树的等效合取范式版本。

我的另一个要求是当我们有可以轻松消除的表达式时,能够简化表达式(如果需要,通过自定义代码)。例如(a < 20) || (a >= 20)归约到TRUE, since (a < 20) = (!(a >= 20)), 所以我们可以在进行过程中消除一些项。

我知道编写布尔表达式树是一个经典的介绍性问题,而且我很确定我之前已经实现过它(一次,很久以前,用于数据结构类:))我知道我可以再做一次,如果需要......但鉴于这可能是以前处理过的事情,我想知道是否有关于我应该研究解决上述问题的库的任何建议。当可能已经有一个非常好的轮子时,我讨厌重新发明轮子。

所以总结一下,我正在寻找一个 Java 库,它具有:

  • 布尔表达式树
  • 表达式的组合
  • 术语的简化(这是非常具体的,所以“很高兴”)
  • 转换为 CNF

有什么建议吗?

(注意:我不会评估这些树,因此每个节点都将是未解析的谓词,例如variable != 20or foo >= 50,因此评估不是必需的,但如果它是库的一部分也没有什么坏处。)

0 投票
1 回答
863 浏览

java - 如何知道 jimple 文件的方法中定义的变量对应于 java 类文件中的哪些变量?

Soot 将 java 类文件转换为 jimple 文件,并重命名了局部变量。现在我想知道 Soot 所依据的方案。

0 投票
1 回答
1833 浏览

java - 是否可以在不调用 soot.Main.main(...) 的情况下使用烟灰分析?

我想使用Soot对 Java 程序进行静态分析,包括控制流图。

各种教程都说使用 Soot 的“标准方法”是创建一个 main 方法,在该方法中将自定义转换添加到 Soot 管道,然后调用soot.Main.main(...)

当然,如果您想在命令行工具以外的其他东西中使用 Soot,这有一些严重的限制。例如,我不清楚在程序中多次调用 Soot 的 main 方法是否合法。

那么有没有人知道通过更复杂的 API 直接使用烟尘分析工具的可能性?

0 投票
1 回答
522 浏览

java - 使用 soot+paddle 进行大型程序分析

我正在尝试使用 Soot 的桨框架对具有 20KLOC-50KLOC 的 Java 代码的 Android 应用程序进行上下文敏感的“指向”分析。我已修改 soot 以具有多个入口点,因为应用程序没有 main 方法。当我运行分析时,它会引发以下异常

我在 paddle 源代码中的 SigDomain.jedd 文件中增加了 SigDomain(14) 中的值 14,这导致分析运行时间更长,但最终仍然失败,给出了相同的异常。(我还将 jvm 的堆栈大小和堆大小增加到 1 GB 和 4 GB)。如果我将此值 SigDomain(14) 设置得太大,例如 ~20000,则桨分析甚至不会开始。

我有以下桨叶选项:

0 投票
1 回答
1104 浏览

soot - 使用 Soot 运行函数

我正在尝试使用 soot 来测量特定类中每个函数的执行时间。我试图阅读 Eric Bodden 的 Soot Framework 的所有教程。

到现在为止我想到的是这个,

这是我的TestClass

我通过在 Eclipse 中使用添加变量并像 Java 应用程序一样执行它来添加烟灰类。

这是我的程序输出:

现在我知道 Soot 已经读取了字节码,并且正在逐步执行所有方法。我想要做的是,运行它们中的每一个。这可以使用 Soot 框架吗?

0 投票
1 回答
603 浏览

java - Soot Java 字节码框架:如何将单个类文件编译为 Jimple/Shimple

我试图弄清楚如何在现有项目(元循环解释器)中使用 Soot。具体来说,我想使用 Soot 将 java 字节码转换为我可以解释的方便的 3 地址代码(Jimple 或 Shimple)。我以后可能想做更多的事情,但现在我只想要转换。

执行此翻译的最佳方式是什么?Soot 似乎是一个庞大的项目,具有大量功能,但我真的只需要一个方法

最好尽可能纯净(即不需要设置/拆卸,所有内容都打包在该方法中)。我花了几个小时浏览 javadoc/papers/presentations,但它们中的大多数似乎都专注于用作命令行工具或 eclipse 插件。谁能给我一些关于从哪里开始的指示?

0 投票
1 回答
232 浏览

java - 在java程序中检测动态加载的类

我正在使用 soot 来检测应用程序的类。但是我已经找到了使用它动态检测类的方法。Soot 仅检测会导致动态加载程序失败的静态链接。所以我必须检测程序中动态加载了哪些类。假设出于实际原因我没有选择对所有类进行检测。例如,我必须检测可能需要数小时的整个 JDK。因为有可能在运行时加载 JDK 类。这个工具/方法的最终目标是给我一个程序使用的所有类的完整名称。

0 投票
1 回答
1311 浏览

java - 使用 Spark(Soot -Eclipse 框架)生成调用图 - 内存问题

我正在尝试使用 Spark(在 Soot -Eclipse 框架中)为 java 代码生成调用图。我从 HelloWorld 开始。即使对于这个小例子,看起来系统内存也不够用。

我的机器是基于 Windows 的 4GB Core I-5。运行的eclipse进程是javaw.exe。即使对于使用烟灰的 Helloworld,是否也会出现这种内存不足行为?我是运行 java 分析的新手,我不确定库类是否会增加巨大的开销。

或者,也许正确的问题是 - 我如何使用 -Xmx 开关在 Windows 上的 Eclipse 中运行具有更多内存的 Soot - 有人这样做过吗?

Eclipse 中的命令如下。我在 Spark Analysis 中使用了一些简化选项。

编辑:现在解决了。来自 Soot 生存指南:设置运行配置时,您应该将以下参数添加到 JVM -Xmx512m -Xss256m 以增加 VM 内存。

0 投票
3 回答
156 浏览

java - 如何轻松创建依赖于 Java 字节码的回归测试?

我在我的应用程序(使用烟灰处理字节码)中发现了一个仅在特定字节码指令上出现的错误。

我想为该特定案例创建一个测试。但是,我无法可靠地编写测试代码,它将编译为预期的字节码,然后会触发错误。

这是我触发错误的尝试:

问题是,编译器通过反转比较和切换两个分支来更改分支逻辑。正如您在下面的字节码中看到的那样,它进行!=比较而不是==. 但是,我正在测试的错误仅由==.

有没有办法编写需要轻松生成可预测字节码的测试用例?鉴于存在不同的 Java 编译器、其版本等,这是否可能?

0 投票
1 回答
751 浏览

java - Soot - 如何防止 loadClassAndSupport 创建一个空的 SootClass?

使用 soot 框架(v.2.5.0)我正在尝试加载某个类:

在调用Scene#loadClassAndSupport课程之前example.MyClass不在场景中 - 这是正确的。
该类也不存在于 soot 类路径中,并且上面的语句RuntimeException会提示找不到该类。这也是正确的行为。

但是在抛出异常之后,班级example.MyClass就在煤烟的场景中!
因此,另一个调用Scene#loadClassAndSupport返回一个SootClass实例,该实例isPhantom设置为 false,但它没有任何方法或字段。

  1. 这种行为是由 soot 框架设计的还是一个错误?
  2. 如果是有意的,如何防止 Soot 向场景中添加“虚拟”SootClass?
  3. 是否有另一种方法来测试某个类是否在 Soot 的类路径中而不将其添加到 Soot 的场景中?

更新:
一个丑陋但可行的解决方法是: