问题标签 [opal-framework]

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 投票
1 回答
46 浏览

scala - OPAL:为什么在将代码外部化为方法后再也找不到 SingleOriginReference?

我正在使用 OPAL 框架开发 Java 字节码的静态分析。

我目前需要更改代码的结构,以添加一些功能。

这起源于一个大方法,我必须将其中的一部分外部化为一个单独的方法:

这就是为什么我将最后的大 if 块外部化为一个单独的方法:

出于某种原因,我现在在 Scala IDE 中遇到了这些行的一些错误:

错误消息如下:

类型 SingleOriginReferenceValue 不是 org.opalj.ai.Domain 的成员

value MultipleReferenceValues 不是 org.opalj.ai.Domain 的成员

在我将此 if 块外部化为单独的方法之前,这些错误消息没有出现。将这些行更改为

并进行导入 import org.opalj.ai.domain.l1.ReferenceValues.SingleOriginReferenceValue import org.opalj.ai.domain.l1.ReferenceValues.MultipleReferenceValues 也无济于事。

谁能告诉我,这里出了什么问题?

0 投票
1 回答
30 浏览

scala - 我可以在 OPAL 中将 FieldValue 转换为 DomainValue 吗?

我正在使用 OPAL 框架编写静态分析。

因此,我调用了一个方法的抽象解释,其中我将传递参数的类型上限作为 FieldTypes。

它看起来像这样:

其中参数是 IndexedSeq[FieldType]。

这会导致以下类型错误:

类型不匹配; 找到:scala.collection.immutable.IndexedSeq[org.opalj.br.FieldType] 需要:Option[scala.collection.IndexedSeq[domain.DomainValue]](扩展为)Option[scala.collection.IndexedSeq[domain.Value] ]

是否有可能将我的 FieldTypes 转换为 DomainValues?

我可以用吗

转换它,即使类型是例如 int?(因为 int 不是一个类)

如果是,是否有一种方法可以计算方法参数的原始索引?

0 投票
1 回答
42 浏览

scala - OPAL:操作数数组中的空值

我目前正在使用 OPAL 框架开发 Java 代码的静态分析。我想分析以下Java方法:

我知道,indirectCaller2b 仅使用参数(double、ArrayList、LinkedList)调用。

考虑到这一点,我构造了一个 DomainValues 的 IndexedSeq,我将它传递给 perform-method ob BaseAI。它看起来像这样:

向量({ai.native_methods_parameter_type_approximation.PublicClass, null}[@0;t=101], ADoubleValue, {_ <: java.util.ArrayList, null}[@-4;t=102], {_ <: java. util.LinkedList, null}[@-5;t=103])

这个参数 ({ai.native_methods_parameter_type_approximation.PublicClass, null}[@0;t=101]) 是使用以下代码创建的:

其他域值是使用 parameterToValueIndex 方法创建的:

这里,caller 代表方法indirectCaller2b,t 是参数的已知运行时类型(参数索引1 的ArrayList 和参数索引2 的LinkedList)。

当我现在对方法进行抽象解释时

并在程序计数器上打印堆栈索引,indirectCaller1 的调用发生在以下代码中,

我得到以下输出:

堆栈索引 0:空

堆栈索引 1: {_ <: java.util.LinkedList, null}[@-5;t=103]

堆栈索引 2:ADoubleValue

堆栈索引 3: {ai.native_methods_parameter_type_approximation.PublicClass, null}[@0;t=101]

这有点令人困惑,因为我只是将indirectCaller2b 的参数传递给了indirectCaller1。因此,输出应该与传递给 perform 方法的 IndexedSeq 相同。

但是在输出中,double 参数后面的参数是 LinkedList 而不是 ArrayList。ArrayList 参数不知何故消失了,operandStack 上的最后一个参数是“null”。

谁能解释一下,这怎么会发生?

0 投票
1 回答
33 浏览

scala - 在抽象解释中使用精确/不精确的域值是 OPAL

在我的 OPAL 分析中,我以下列方式创建域值:

在我的 typeApproximation 对象中,我有信息,它的类型是上限类型还是精确的运行时类型。但是,我不知道如何将此信息传递给相应的 DomainValue。

我将这些 DomainValues 传递给BaseAI.perform方法以执行对 java 方法的抽象解释:

DomainValues 包含在参数值中。

有没有可能告诉抽象解释,我的一些参数是精确的运行时类型,而其他一些参数只是类型上限?

0 投票
1 回答
80 浏览

scala - 禁用来自 OPAL 项目的控制台输出?

我正在使用 OPAL 框架来实现静态分析。我想知道是否可以在执行时抑制在控制台上打印的框架的控制台输出。下面显示了部分输出。

我发现 OPAL 有几个 LogLevel(即 WARN、INFO、ERROR),但我找不到指定日志记录粒度的方法。我对警告和错误非常感兴趣,但我想在信息级别抑制(大量)输出。

0 投票
1 回答
37 浏览

scala - OPAL:手动创建带注释的方法

在 OPAL 框架中,是否可以手动创建带注释的方法?

我目前有以下代码:

我想添加注释

到这个方法。我怎样才能做到这一点?

0 投票
1 回答
37 浏览

scala - OPAL-Framework:获取方法的抛出异常

在 OPAL 框架中,如何从方法或其描述符中获取所有抛出的异常?我找不到任何返回它们的方法。

我只对方法的 throws-declaration 中列出的那些异常感兴趣。

0 投票
1 回答
68 浏览

sbt - OPAL-如何在本地机器的 Docker 中构建代码(面临编译错误)?

我在 Docker 中访问代码($docker pull mreif/fse2016:evaluation),代码可以在远程服务器中编译和运行而不会出错。当我将它下载到本地机器时,我在编译时遇到了一些错误(使用:sbt compile):

  1. [错误](*:更新)sbt.ResolveException:未解决的依赖:de.opal-project#abstract-interpretation-framework_2.11;0.9.0-SNAPSHOT:不是

[我做了什么]我在“build.sbt”中添加了以下几行:

  1. [错误] 评估/src/main/scala/org/opalj/evaluation/EntryPointAndCallEdgeCountAnalysis.scala:90:未找到:

[我做了什么]我在“build.sbt”中添加了以下几行:

3.[错误] /src/main/scala/org/opalj/evaluation/EntryPointAndCallEdgeCountAnalysis.scala:130:未找到:值LibraryEntryPointsAnalysis

查了相关代码,LibraryEntryPointsAnalysis 已经被实际导入了但是不起作用。

你能帮我确认一下我在编译源代码时遗漏了什么操作吗?

非常感谢!

0 投票
1 回答
144 浏览

scala - OPAL-关于在 OPAL 中实现构造调用图

在论文 [A Software Product Line for Static Analyses(2014)] 中,有一个与构建调用图相关的插图(清单 7)。

在此示例中,第 14 行与构造调用图有关。当我检查 src 代码和 API 时,我能找到的是 DefaultCHACallGraphDomain.scala,它没有实现构造调用图。

因为我的目的是使用 OPAL 来构建调用图。是否有任何演示或文档可以帮助我理解 OPAL 中现有的 CallGraphDomain?目前,我只能找到一些类声明。

如果有人能给我一些与此主题相关的建议,我将不胜感激。

提前致谢。

0 投票
1 回答
59 浏览

opal - OPAL-如何配置项目的属性

当我运行分析时(例如 OPAL 源代码中的 CHADemo),我总是收到警告

在前一个问题中,它建议在 /src/main/resources/reference.conf 下的 Common 项目中的配置文件。所以我尝试在文件中添加后续行,但仍然收到相同的警告。

此外,当我在我的项目中将 OPAL 作为库导入并尝试在我的项目的“/src/main/resources/”中创建 reference.conf 时。我遇到了同样的问题。