在以下示例字节码中:
invoke-virtual/range {v0 .. v5}, Landroid/location/LocationManager;->requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;)V
寄存器范围表示寄存器v0
,v1
,v2
,v3
,v4
,v5
被传递给方法,但为什么这个数字与所示类型的数量不一样,只有2?
invoke-kind / range和normal invoke-kind之间有区别吗?
答案 0 :(得分:3)
参数列表Ljava/lang/String;
中总共提到了4个参数,
J
,F
和Landroid/location/LocationListener;
。另外,由于is是非静态方法,因此在其他参数之前存在隐含的this
参数。这个难题的最后一个缺点是'J'是一个双精度型,它是64位型 - 这意味着它需要两个寄存器。
所以参数是:
this - v0
Ljava/lang/String; - v1
J - v1 and v2
F - v3
Landroid/location/LocationListener; - v4
答案 1 :(得分:0)
好的......这些类型没有,
分隔,这使初学者很难区分:Ljava/lang/String
是完整的类名,J
是长类型, F
用于浮点类型,Landroid/location/LocationListener
用于完整的类名。
但是,仍然不清楚,对于指定的所有参数类型,加上方法调用的this
类型的对象,数字是5个参数类型,但为什么寄存器的范围指定为6?