gpt4 book ai didi

java - aload_2 似乎指向第一个参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:47:52 30 4
gpt4 key购买 nike

我正在使用 javap 反汇编一些 java 字节码,因为在使用 jd-gui 反编译它之后,我遇到了一些方法错误。但是,将反汇编的字节码与 jd-gui 给我的内容进行比较,看起来 aload_2 指向第一个参数,而不是 aload_1。

所讨论的方法是一个公共(public)的、非静态的、无效的、可能是同步的方法。 (我相信该方法可能是同步的,这就是为什么 jd-gui 在使用它时遇到了一些麻烦。)无论如何,该方法有 6 个参数(int、long、String、String、String、String),并且这些变量被赋予了以下是 jd-gui 的名称:

int paramInt, long paramLong, String paramString1, String paramString2, String paramString3, String paramString4

现在,为了向您展示当我说第一个参数似乎是 aload_2 时我的意思,让我发布部分反汇编和反编译代码。

反编译:

Object localObject1;
if (paramString2.equals("DELETE"))
{
localObject1 = new HttpDelete(paramString1);
}

反汇编:

11: aload         5
13: ldc #214 // String DELETE
15: invokevirtual #219 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
18: ifeq 192
21: new #221 // class org/apache/http/client/methods/HttpDelete
24: dup
25: aload 4
27: invokespecial #223 // Method org/apache/http/client/methods/HttpDelete."<init>":(Ljava/lang/String;)V
30: astore 8

在反汇编代码中,第 11 行到第 18 行与反编译代码中的 if(paramString2.equals("DELETE")) 行相同。请注意 aload 5 如何指向第 4 个参数 (paramString2)。这不是我所期望的。通常 aload_0 = this,aload_1 = 第一个参数,aload_2 = 第二个参数,依此类推。

您可能希望 aload 5 指向第 5 个参数,但 jd-gui 将其解释为指向第 4 个参数。为什么?该方法可能同步的事实与此有什么关系吗?

对于可能需要的任何说明,我会将反汇编的字节码解释为:

if(paramString3.equals("DELETE"))
{
HttpDelete httpDelete = new HttpDelete(paramString2);
//More code on down here...
}

最佳答案

因为long参数会占用一对局部变量JVMS 2.6.1 .

关于java - aload_2 似乎指向第一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23879723/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com