为什么要用smali代码在方法中再传递一个参数

问题描述 投票:1回答:1

[通过apktool解码的一段smali代码中,我发现方法调用传递的参数比方法定义中声明的参数多。绝对不会使用该额外的参数。但是,如果我删除它,则会在运行时发生错误,并从“验证程序”中说“期望更多,找到三个”。这是怎么回事?

# method definition
.method public setLatitude(D)V
    .locals 1
    #(snipped)
.end method

# method call
# v3 is not defined actually
invoke-virtual {v1, v2, v3}, LFoo;->setLongitude(D)V

android dalvik smali
1个回答
0
投票

所有非静态方法都将调用该方法的对象作为第一个参数。

在您的示例中,该方法接受类型D的参数,这是一个需要2个寄存器的宽泛类型。在这种情况下,v1是LFoo;该方法被调用的实例,并且[v2,v3]是包含该方法的64位宽参数的寄存器对。

[当您说“ v3并未实际定义”时,将在设置v2时隐式设置,因为所有宽值都使用连续的寄存器对存储。

© www.soinside.com 2019 - 2024. All rights reserved.