【发布时间】:2019-03-07 15:58:07
【问题描述】:
Dalvik 不接受以下 smali 代码:
.method getOrCompute(Ljava/lang/Object;ILcom/google/inject/internal/guava/base/$Function;)Ljava/lang/Object;
.registers 24
.param p2, "hash" # I
.annotation system Ldalvik/annotation/Signature;
value = {
"(TK;I",
"Lcom/google/inject/internal/guava/base/$Function",
"<-TK;+TV;>;)TV;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/util/concurrent/ExecutionException;
}
.end annotation
#@0
.prologue
.line 12
:cond_0
:try_start_0
move-object/16 v17, p3
#@3
move/16 v16, p2
验证器错误:
dalvikvm: VFY: copy1 v16<-v22 type=2 cat=1
dalvikvm: VFY: rejecting opcode 0x03 at 0x0003
dalvikvm: VFY: rejected Lcom/google/inject/internal/guava/collect/$ComputingConcurrentHashMap$ComputingSegment;.getOrCompute (Ljava/lang/Object;ILcom/google/inject/internal/guava/base/$Function;)Ljava/lang/Object;
dalvikvm: Verifier rejected class Lcom/google/inject/internal/guava/collect/$ComputingConcurrentHashMap$ComputingSegment;
我真的不明白这个问题。 v16 和 v22 (p2) 是 16 位寄存器。所以一切都应该很好。
【问题讨论】:
-
回复:您对我现在已删除的答案的评论 - 是的,您是对的。我算错了参数。正如您所提到的,p2 在方法的开头包含一个整数。