在抽象解释中使用 precise/unprecise DomainValues 是 OPAL
Working with precise/unprecise DomainValues in Abstract Interpretation is OPAL
在我的 OPAL 分析中,我按以下方式创建域值:
domain.TypedValue(org.opalj.ai.parameterToValueIndex(
caller.isStatic, caller.descriptor, index), typeApproximation.upperTypeBound)
在我的 typeApproximation 对象中,我有信息,它的类型是类型上限还是精确的运行时类型。但是,我不知道如何将此信息传递给相应的 DomainValue。
我将这些 DomainValues 传递给 BaseAI.perform
方法以执行 java 方法的抽象解释:
BaseAI.perform(classFile, caller, domain)(Some(parameters))
DomainValues 包含在参数值中。
有没有可能告诉抽象解释,我的一些参数是精确的运行时类型,而其他一些参数只是类型上限?
org.opalj.ai.ReferenceValuesFactory
定义的工厂方法(始终可用)使您能够创建具有所需属性的值。例如。使用 InitializedObjectValue
将在假定类型准确的地方创建一个 DomainValue。使用工厂方法:ReferenceValue
给定类型被视为类型上限。此外,org.opalj.ai.l1.DefaultReferenceValuesBinding 定义了通用工厂方法:
def ObjectValue(
origin: ValueOrigin,
isNull: Answer,
isPrecise: Boolean,
theUpperTypeBound: ObjectType,
t: Timestamp
): SObjectValue
让您完全掌控。
在我的 OPAL 分析中,我按以下方式创建域值:
domain.TypedValue(org.opalj.ai.parameterToValueIndex(
caller.isStatic, caller.descriptor, index), typeApproximation.upperTypeBound)
在我的 typeApproximation 对象中,我有信息,它的类型是类型上限还是精确的运行时类型。但是,我不知道如何将此信息传递给相应的 DomainValue。
我将这些 DomainValues 传递给 BaseAI.perform
方法以执行 java 方法的抽象解释:
BaseAI.perform(classFile, caller, domain)(Some(parameters))
DomainValues 包含在参数值中。
有没有可能告诉抽象解释,我的一些参数是精确的运行时类型,而其他一些参数只是类型上限?
org.opalj.ai.ReferenceValuesFactory
定义的工厂方法(始终可用)使您能够创建具有所需属性的值。例如。使用 InitializedObjectValue
将在假定类型准确的地方创建一个 DomainValue。使用工厂方法:ReferenceValue
给定类型被视为类型上限。此外,org.opalj.ai.l1.DefaultReferenceValuesBinding 定义了通用工厂方法:
def ObjectValue(
origin: ValueOrigin,
isNull: Answer,
isPrecise: Boolean,
theUpperTypeBound: ObjectType,
t: Timestamp
): SObjectValue
让您完全掌控。