1

メソッド本体を開始する Java .class ファイルを検索する方法

元。

package com.test;

class Hello
{

    public static boolean isTrue()  {
        return true;
    }

    public static void main(String args[])
    {

    }
}

isTrue()Hello.class のメソッド本体の開始位置を知りたい

アドレス 0x0205 の hexeditor で 04 0C (バイトコード: iconst_1 ireturn ) を見つけることができますが、この値を任意のメソッドの名前でプログラム的に取得したいと考えています。

4

1 に答える 1

1

JVM クラスファイル形式では、オフセットは特定のセクションに保存されません。代わりに、各アイテムには独自の長さがあり、順次解析されます。つまり、メソッド コードを見つけるには、少なくとも定数プールを解析して各型を取得し、文字列の長さを計算できる必要があります。これは、メソッドが定数プールの後に来るためです。

その時点で、フル機能のクラスファイル パーサーを使用することもできます。そこにはかなりの数のライブラリがあります。

PS バイトコード レベルでは、メソッドは名前で一意に識別されるのではなく、(名前、記述子) のペアで識別されます。複数のメソッドに同じ名前を付けることができます。フィールドについても同様です。

于 2013-04-14T19:10:26.450 に答える