如何从Java .class文件中获取方法体偏移量

时间:2013-04-14 18:46:51

标签: java class bytecode

如何在Java .class文件中找到启动方法主体的位置

实施例

package com.test;

class Hello
{

    public static boolean isTrue()  {
        return true;
    }

    public static void main(String args[])
    {

    }
}

我想知道Hello.class

上的start isTrue()方法体的位置

我可以在地址0x0205处找到带有hexeditor的04 0C(字节码:iconst_1 ireturn),但我希望以编程方式为任何方法命名此值。

1 个答案:

答案 0 :(得分:1)

在JVM类文件格式中,偏移量不会存储到特定节。相反,每个项目都有自己的长度,并按顺序进行解析。这意味着为了找到方法代码,您至少必须能够解析常量池以获取每个类型并计算字符串长度,因为方法位于常量池之后。

此时您还可以使用功能齐全的类文件解析器。那里有很多图书馆。

P.S。在字节码级别,方法不是通过名称唯一标识,而是通过(名称,描述符)对标识。多个方法可以具有相同的名称。字段也是如此。