Java クラス A の .class ファイルが与えられた場合、(たとえば BCEL、ASM などを使用して) 特定のバイトコード シーケンスを抽出し (それが基本ブロックであると仮定)、別の場所に配置し、後で実行する方法はありますか?バイトコードのそのシーケンス?
例: ソース コードには ... a += b; という行があります。b += 21; . .
私はバイトコード表現にしかアクセスできません。これらのバイトコードを抽出して、ブラック ボックスとして扱いたいと考えています。クラス A の指示では、ソース行の代わりに「a += b;」欠落している適切なバイトコード シーケンスを保持するこの外部ブラック ボックス X をポイントする必要があります。スタック フレーム上のすべての必要な変数 (たとえば、a、b の現在の値、おそらくブラック ボックス X で使用されるメソッド パラメーターなど) をブラック ボックスにフィードし、バイトコード シーケンスの実行後に、ブラック ボックスは、新しく更新されたフレーム変数とともに元のクラス A に制御を戻します...
アイデアをありがとう。
編集:
以下に示すように、ブラック ボックスはスタブ クラス ファイル内のスタブ メソッドであることが最も合理的です。問題は、この命令シーケンスからこの整形式のスタブ クラスとメソッドを最も合理的に作成する方法と、元のクラス A から制御を移す方法です。理想的には、これはコンパイル時に「オフライン」で行われます。時間。