2016-06-16 9 views
1

Javaプロジェクトにバイトコードを挿入したいと思います。私はバイトコードのメソッドの前に命令を挿入することが可能かどうか疑問に思っています。 つまり、JavaバイトコードがPICの場合はどうなりますか?Javaバイトコードの位置は独立していますか?

答えて

0

Javaバイトコードは仮想マシンによって相互作用されるため、ネイティブコードのようなPCまたはPICの概念はありません。

メソッドの先頭に命令を挿入すると、それが問題を起こす可能性があります。具体的には、例外ハンドラはバイトコード内のオフセットを参照するため、それらのすべてを更新する必要があります。また、スタックマップテーブル、および存在する可能性のある他のメタデータ(行番号など)も更新する必要があります。

+1

... 'switch'命令の埋め込み... – Holger

+0

スイッチの構造は位置によって異なるのですか? javassistのようなツールは、insertbeforeというメソッドを提供します。このメソッドは既存のコードに修正を適用しますか? – Bob5421

+0

@ Bob5421:指示['lookupswitch'](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.lookupswitch)と[' tableswitch'] (https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.tableswitch)は、埋め込みテーブルを4で割り切れる位置に配置するためにパッドバイトを使用します。 Javassistのようなツールが世話をするでしょう。 – Holger

関連する問題