in the following example bytecode:
invoke-virtual/range {v0 .. v5}, Landroid/location/LocationManager;->requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;)V
The range of registers indicates registers v0,v1,v2,v3,v4,v5, are passed to the method, but why the number is not the same as the number of the types indicated, which is only 2??
Is there difference between invoke-kind/range and normal invoke-kind?
There are a total of 4 parameters mentioned in the parameter list,
Ljava/lang/String;,J,F, andLandroid/location/LocationListener;. In addition, since is is a non-static method, there is an impliedthisparameter that occurs before the other paremeters. The final missing piece of the puzzle is that ‘J’ is a double, which is a 64-bit type – meaning it requires two registers.So the parameters are: