私はbyte[]
の配列を持っています。クラスファイル内のメソッドのバイトコードシーケンスです。このbyte[]
アレイを選択的に逆コンパイルする方法はありますか?私は実際の.class
ファイルにアクセスできません。 多くのメソッド(javassist.bytecode.CodeAttribute
クラス)を持つJavassistライブラリを見ましたが、そのような特定のメソッドを見つけることができませんでした。
誰か手掛かりがありますか?バイトコードの逆コンパイル
私はこのbyte[]
配列をとり、JVMリファレンスマニュアルを使って実際のバイトコードをJavaByteコードニーモニックに変換できますが、逆コンパイルされたJavaソースコードを生成する必要があります。 ありがとう!
JPDAメソッドのcom.sun.jdi.Method.bytecodes()関数呼び出しからバイトコードを取得しました。私はそれを逆コンパイルして、その関数の逆コンパイルされたバージョンを表示できるようにしたい。問題(例:保護、個人、静的変数などの外部参照)がある可能性があることを理解しています。しかし、私はそれを逆コンパイルする方法があると思っていた。私は自分自身のバイトコードの逆コンパイル方法を書いたので、私はバイトコードから有効なバイトコードを持っています。これは得られたバイトコードからニーモニックを作成します( 'javap'の出力で検証しました)。 – tr4nc3
興味深い。まあ、そこにデコンパイラがあります。私がプログラムAPIを提供していることがわかっているのは、[Java Decompiler](http://java.decompiler.free.fr/)だけです。私はそれがデココンパイラが入力バイトコードに関してどのように柔軟性があるかに依存するだろうと思う。私はJDIを知らないのですが、 'com.sun.jdi.Method'をお持ちの場合は、クラスを表現しているバイトコードの情報を得ることができます。おそらく 'method.declaringType()'のようなもので、[ClassType](http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/)を提供するはずです。 ClassType.html)? –
右の 'Method.declaringType()'は 'ReferenceType'オブジェクトのみを与えます。そのオブジェクトからバイトコードを取得する方法はありません。 'sourcePath()'と 'sourceName()'関数呼び出しがありますが、ソースのファイル名を取得するかもしれませんが(ソースがあると仮定して)、ほとんどの場合そうではないかもしれません最初は逆コンパイラ)。私は、JD-Eclipseの人たちがプログラム的なAPIを提供しているかどうかはわかりません。私は彼らがEclipseのために持っていると信じています。また、クローズドソースなので、ライセンスごとに許可されていないリリースファイルを元に戻しています。 – tr4nc3