問題タブ [jvm-bytecode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
459 参照

java - 現在のクラスを静的にスタックに追加する ASM LdcInsnNode を作成するにはどうすればよいですか?

他の人が作成したバイトコードを変更するためにASM ライブラリを使用しています。LdcInsnNode任意のクラスの任意のメソッドについて、現在のクラスをスタックに追加するを作成したいと思います。

たとえば、 というクラスを変換するとしcom.example.ExampleClassます。に相当するバイトコードを作成したいと思いますSystem.out.println(ExampleClass.class.getName());

これは比較的単純な作業のようです。Eclipse Bytecode Outline プラグインを使用すると、次のバイトコードが同等であると表示されます。

次のコードを試しました:

これは の拡張機能で実行されているClassNodeため、フィールドnameを参照してください。ClassNode.nameこのInsnListメソッドによって返された は、既存のAbstractInsnNodeusingの前に挿入されていInsnList.insertBefore(AbstractInsnNode, printClass())ます。バイトコードがこのポイントに到達すると、次の理由でエラーが発生します。

これは明らかに、LDC 命令が"Lcom/example/ExampleClass;.class"実際のクラスではなく文字列を追加しているためLcom/example/ExampleClass;.classです。

これに対する回避策はありますか? クラスがまだ存在しないため、Classオブジェクトを anに直接追加することは不可能のようです。しかし、オブジェクトLdcInsnNodeをロードする命令を追加する方法はありますか?Class

Object.getClass()私の特定のケースでは、静的コンテキストから動作する必要があるため、メソッドを呼び出すことはオプションではありません。

0 投票する
1 に答える
62 参照

android - Android バイトコード: 一部の変数の値が定義されていません

Android アプリケーションをリバースします。読んでいると、 や などの変数を使用するメソッドがいくつかp1ありp2ます。それらの変数をどこで参照できるかわかりません。例えば:

私が理解していないことは次のとおりです。

ここの変数がわかりませんp1 p2 p3。教えてください。ありがとう

0 投票する
2 に答える
824 参照

java - ASM の ClassWriter COMPUTE_FRAMES

ASM でジャンプをいじって、スタック マップ フレームが Java でどのように機能するかを理解しようとしています。いくつかのことを試すための簡単な方法を作成しました: (Krakatau で逆アセンブル):

StringBuilderいくつかの文字列を変数と結合するための を作成するだけです。

L35 の invokespecial 呼び出しは、L10 の invokespecial 呼び出しとまったく同じスタックを持っているため、ICONST_1; IFEQ L10ASM を使用して L35 の直前にシーケンスを追加することにしました。

分解してみると (再び Krakatau で)、結果が非​​常に奇妙であることがわかりました。ASM は、L10 のスタック フレームを次のように計算しました。

それ以外の

私が期待していたように。

さらに、 を呼び出すことができないため、このクラスも検証に合格しませStringBuilder#<init>Top。ASMのマニュアルによるとTop、初期化されていない値を参照していますが、ジャンプ位置と前のコードの両方から、コードで初期化されていないようです。ジャンプの何が問題なのかわかりません。

挿入したジャンプに何か問題があり、クラスがフレームを計算できなくなりますか? これはおそらく ASM の ClassWriter のバグですか?