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



i反向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在方法开始时自动初始初始初始初始初始化。

相关内容

  • 没有找到相关文章

最新更新