IJVM を使用しており、静的オフセット (またはラベル) の代わりにローカル変数を使用して GOTO 命令を使用しようとしています。うまくいきません。単に変数名をラベルとして扱い、そこに分岐しようとしているだけだと思いますが、そのようなラベルは存在しません。変数(オフセットを含む)の内容を強制的に読み取る方法、またはその他の解決策はありますか?
前もって感謝します。
GOTO 命令は MIC1 に実装されています。オペコードの後の 2 バイトは、命令開始時の PC へのオフセットとして解釈されます。
割り当てでは、オペコードの後のバイトを分岐オフセットを含むローカル変数へのオフセットとして解釈する新しい GOTO を MIC1 に書き込むように求めているに違いないと思います。
セキュリティ上の理由から、JVM バイトコードでは、変数の内容に基づいて任意の命令にジャンプすることはできません。この制限により、JVM は、特定のメソッドを介してすべての制御パスを静的に列挙することにより、バイトコードのさまざまなセキュリティ プロパティを検証できます。どこにでもジャンプできたとしても、静的アナライザーは、必要なすべてのプログラムの不変条件が保持されていることを証明できませんでした。
任意のインデックスにジャンプする必要がある場合は、tableswitch
またはlookupswitch
命令を調べることを検討してください。これにより、可能な宛先を事前に列挙できます。それはまさにあなたが探しているものではありませんが、私の知る限り、あなたが作ろうとしているような任意のジャンプは JVM バイトコードでは不可能です。
お役に立てれば!