Android 字节码:一些变量的值未定义

Android bytecode: value of some variables not defined

我撤消了 android 申请。在阅读时,我看到一些使用变量的方法,例如 p1p2 ...我不知道在哪里可以引用这些变量。例如:

.method public b(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
    .locals 1

    invoke-static {}, Lpnf/this/object/does/not/Exist;->a()Z

    move-result v0

    invoke-static {v0}, Lpnf/this/object/does/not/Exist;->b(I)V

    .prologue
    .line 33
    if-eqz p1, :cond_0

    if-eqz p2, :cond_0

    if-eqz p3, :cond_0

    .line 34
    invoke-static {p1, p2, p3}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I

    .line 36
    :cond_0
    return-void
.end method

我不明白的是:

if-eqz p1, :cond_0

if-eqz p2, :cond_0

if-eqz p3, :cond_0

我不知道这里的变量 p1 p2 p3。请告诉我。谢谢

p1、p2等只是汇编程序提供的语法糖。在 Dex 代码中,局部变量和参数是一个巨大的数组,参数在数组的最后几个槽位传递。汇编程序可以帮助您直接通过 pn 语法引用参数,而不必跟踪您拥有多少局部变量并使用适当的 vn。

在发布的示例中,您有 1 个局部变量和 4 个参数,这意味着寄存器看起来像 {v0, p0, p1, p2, p3}

后面的 4 个在方法开始时自动初始化为传递的参数值。