JavaクラスAの.classファイルを指定すると、特定のバイトコードシーケンスを抽出するための方法(たとえばBCEL、ASMなど)それを別の場所に置き、その後、そのバイトコードのシーケンスを実行しますか?Javaバイトコードの任意のシーケンスを抽出して実行する
例: ソースコードには... a + = b; b + = 21; 。 。
私はバイトコード表現にしかアクセスできません。私はそれらのバイトコードを抽出し、それらをブラックボックスとして扱いたいと思う。クラスAの指示では、ソース行 'a + = b;'の代わりに適切な欠落したバイトコードシーケンスを保持するこの外部ブラックボックスXを指し示すようにします。私は、スタックフレームに必要なすべての変数をブラックボックスに供給したい(例えば、ブラックボックスXで使われるa、b、おそらくはメソッドのパラメータの現在の値)...そして、バイトコードシーケンスの実行後に、ブラックボックスは、新しく更新されたフレーム変数と共に元のクラスAに制御を戻します。
ありがとうございました。
編集:
以下示唆したように、ブラックボックスは、最も合理的にスタブクラスファイルの内部スタブ方法になります。次に、この命令シーケンスからこの形式のスタブクラスとメソッドを最も合理的に作成する方法と、元のクラスAからコントロールを転送する方法です。理想的には、これはコンパイル時に「オフライン」に行われます。時間。
素晴らしい記事です。 ASMがそのような優れたツールである主な理由は、優れたドキュメントのためです。 – ChaimKut