问题标签 [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.
java - soot如何获取一个类的子类?
我可以通过 获得一个类的超类SootClass.getSuperclass()
,但我不知道如何获得它的子类。
我需要先加载子类吗?没有getSubclass()
功能。谢谢!
java - Soot:源文件更改后重新加载类
我正在编写一个 IntelliJ 插件来分析 java 程序代码。因此我使用Soot来编写静态分析。每次用户触发我的插件的分析操作时,我都会VirtualFile
像这样获取当前上下文的电流:
当我检查此文件的内容时,所有更改都已应用。在此之后,我正在加载我想在 Soot 中分析的类。
这对我来说非常有效。但现在我的问题是:如果我改变某事。在我的插件的测试实例中并再次触发相同的分析,没有任何变化。
到目前为止我尝试了什么?
我设置了以下选项:
我还手动删除了所有课程
像这样:
并再次启动程序。
soot - SOOT - CompilationDeathException(和幻影军队)
这是我在 WIndows 10 命令外壳上使用的命令:
当我执行它时,我得到以下输出:
OCLRUler 项目中使用的所有库都包含OCLRUler/lib
在OCLRuler/src
. 输出目录不包含在 soot 目录中。此外,该项目确实编译(我正在使用它)。该.
目录包含所有 soot/jasmin/heros jar。
尽管如此,所有类都被认为是幻像,并且 Soot 编译中止是因为(我猜)它缺少这些类的主体。我的意思是“EvaluatorOCL”(即,仍在猜测,CompilationDeathException 的来源)是一个“幻影类”。
怎么了 ?
我应该在 Soot 的类路径中添加所有包吗?
我尝试了各种命令行表达式——直到我彻底迷路了。有人对此事有线索吗?
非常感谢。爱德华
java - SOOT 类加载——什么是“级别”?
从这里:
coffi 的设计要求,为了将某个 C 类提升到 N 级,必须首先将 C 引用的所有类提升到 N-1 级。为了知道 C 引用了哪些类,您需要将 C 提升到 N-1 级。
这些“级别”是什么?
java - Soot 获取基础类的方法体
我使用 soot 为 java 编写了一个小的副作用检测。它为我自己编写的函数提供了预期的输出。但是对于基本类(java.lang. , java.awt.)它不起作用。
我想用 Soot 分析以下函数:
我期望一个输出,它只是从java.awt.Point返回对象的 x 值,但 Soot 为getX-function提供了以下代码:
我使用以下代码来检测副作用:
函数调用:
我必须手动加载类吗?如果是,我该怎么做?
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 项目。
我还下载了以下内容:
- Soot 捆绑包(也包含 Heros 和 Jasmin):https ://soot-build.cs.uni-paderborn.de/nightly/soot/sootclasses-trunk-jar-with-dependencies.jar
- 煤烟信息流:https ://github.com/secure-software-engineering/soot-infoflow/releases/download/FlowDroid_2.0/soot-infoflow.jar
- soot-infoflow-android:https ://github.com/secure-software-engineering/soot-infoflow-android/releases/download/FlowDroid_2.0/soot-infoflow-android.jar
- 日志库:https ://github.com/secure-software-engineering/soot-infoflow-android/raw/develop/lib/slf4j-api-1.7.5.jar和https://github.com/secure-软件工程/soot-infoflow-android/raw/develop/lib/slf4j-simple-1.7.5.jar
- Android XML 解析器库:https ://github.com/secure-software-engineering/soot-infoflow-android/raw/develop/lib/axml-2.0.jar
请指导我如何构建它们或从这里开始。此外,用于记录的库的链接似乎不可用。请也帮助我。
java - 煤烟:场景中没有出现的callgraph!jb申请失败
使用 Soot,我正在尝试构建调用图。据我所知,问题在于,在处理 API 时,没有可用作入口点的主要方法。我更彻底地检查了 Soot 正在加载什么。使用的类是“正确加载的”(我从中打印它们的列表Scene.v().getClasses()
,它显示了项目中的正确类(源和测试源)。
现在,Soot 在请求调用图时不断出现相同的异常Scene.v().getCallGraph()
:
因此,我尝试手动添加入口点,在测试套件中寻找用于该目的的方法。我发现,如果加载了类,则它们的方法不会。这是我使用的片段,在 Soot 的加载类方法的教程中找到:
但c.getMethods()
不返回任何方法......更多,调用sm.retrieveActiveBody();
引发异常:
这适用于几乎所有类(测试类除外)。我究竟做错了什么 ?为什么方法被拒绝?
java - 来自“类”实例的 jimple 表示
我需要热交换各种类的方法实现(直到运行时的某个时候我才知道它的新实现,并且可能会再次改变)。
ByteBuddy
可以很容易地做到这一点,但它(显然)除了拦截它之外对方法做不了太多,这就是它与 ASM 一起提供的原因。
基本用法是
在哪里
正在使用 ASM。
但是 ASM 很乏味,很难阅读和编写更复杂的代码。所以我更愿意使用 Jimple,因为它为 if-stmts 等提供了抽象。
因此,这个想法是从
,以某种方式将其转换为
,在那里转换方法,并以某种方式将其编译回byte[]
stByteBuddy
可以重新加载类。
简而言之:
我想SootClass
从 a创建一个可转换的Class<?>
并将其编译为byte[]
我可以传递的 a。
我怎么做?
更新
这似乎暗示执行从SootClass
to的转换很热byte[]
,但到目前为止,我还没有找到任何有助于从Class
to转换的文档或示例SootClass
。大多数示例似乎只在加载类之前对其进行一次检测。