問題タブ [java-bytecode-asm]
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.
java - Java ASM のクラス トランスフォーマー - 生成できますか?
プロジェクト内のクラスを変換するために Java ASM の使用を開始したいと考えていString
ます。いくつかのメソッドに 1 つの引数を追加し、この引数を使用してログを送信します。
私が読んだasmのウェブサイトで
クラス トランスフォーマーを実装する場合は、2 つの Java ソース ファイル (変換前と変換後) を記述し、ASMifier モードでプラグインの比較ビューを使用して、同等の ASM コードを比較します。
しかし、Java ASM を使用するのは非常に難しいと思います。生成できるツールはありますclass transformer
か?それは非常に便利です!
java - Java ASM4:super(ASM4);?
さて、私はASM4バイトコードライブラリのPDFチュートリアル/ドキュメント/本(もしそうなら)を読んでいました。私は例を試し、コードを読んで実際に入力し、実行してから出力から学習することで、学習しながら学びました。私はこの部分に出くわしました:
リンクは次のとおりです。http://download.forge.objectweb.org/asm/asm4-guide.pdf
スーパーで何を渡すのかわからない。私のIDEもあまり役に立ちませんでした。
java - ASMコードで特定の「データ分析」を実行するJavaツール
JavaクラスまたはEclipseで使用できるものを使用したASMコードの特定の「データ分析」が必要です。具体的には、次の順序で変数の3つのステップを識別する必要があります。1)使用; 2)初期化; 3)削除します。
ありがとう。
java - ASMのどの命令がデバッグにのみ必要ですか?
asmコードを合理化したいと思います。これまでのところ、Eclipseでバイトコードのアウトラインを使用して、コードの記述方法を学習しています。デバッグ情報を含むバイトコードしか表示されないため、安全に除外できるものがわからないため、考えられるすべてのケースを自分でテストすることに精通している誰かが迅速に回答することをお勧めします。
これらの仮定は本当ですか?
- 同じクラスまたはメソッドでも、異なるスタイルを混在させることができます(デバッグ情報のないメソッドへのデバッグ情報のあるメソッドへのコードの挿入)
visitLabel
ジャンプ命令のターゲットとしてのみ必要であり、すべての命令の周りでは必要ありませんvisitLineNumber
省略可能(デバッグ情報)visitLocalVariable
省略可能(デバッグ情報)
ありがとう!
java - javaagents: 変換順序
私のプロジェクトでは、バイトコードを 2 段階で変換したいと考えています。順番が重要です。
- まず、メソッド定義を変更する必要があります
- 次に、メソッドが呼び出される方法
例えば
- 定義を から
String hello()
に変更String hello(String s)
- 通話を から
Hello.hello()
に変更Hello.hello("newArgument")
最初のステップを実行するトランスを追加することができました。
私の質問は: その方法で新しいトランスを追加できますか:
MyClassFileTransformer
そして、前に彼の仕事をすることを確認してくださいMyClassFileTransformer2
?
java - Java asm は、メソッド変数から「this」オブジェクトを取得します
invokevirtual 操作を呼び出したオブジェクトの名前を知る必要があります (次の形式 - Objectname@object_id)。MethodInsnNode オブジェクトのみを指定することは可能ですか? インデックス0でローカル変数に格納されていることは知っていますが、取得方法がわかりません。
java - ASM メソッド実行リスナー
メインメソッド内のすべての内部メソッド呼び出しをインターセプトできるアダプターを実装することは可能ですか? このクラスがあれば…
「kill」メソッドのリスナーをインストールすると、「Grave」クラスの「dig」および「put」メソッドの呼び出しがインターセプトされます。これが可能であれば、いくつかのコードも素晴らしいでしょう。
ありがとう。
java - JAVA ASM: 変更によってネストされた例外が発生するのはなぜですか?
私のプロジェクトでは、ASM
メソッドのシグネチャを変更するために使用します。RMI を使用しているメソッドを選択し、次のように変更します。
から:
に
そしてから
に
したがって、定義と呼び出しの両方が変更されます。
驚くべきことに、場合によってThreadId
は機能し、制御フローで渡されます。
しかし、1 つの方法の原因:
このエラーが発生する理由がわかりません。説明していただけますか?または、それを解決する方法を提案してください。どんな助けでも素晴らしいでしょう!
java - リフレクションによって呼び出されたメソッドに対してインストルメンテーションが機能しない
Javaアプリケーションの実行をトレースして、実行トレースの動的分析を実行しています。
すべてが正常ですが、リフレクションを介してメソッドが呼び出された場合。の呼び出しを確認できますがMethod.invoke
、その後、トレースにはリフレクションによって実行された命令が含まれていません。
プログラムが「通常の」実行に戻るとすぐに、プログラムは通常どおりに再度トレースされます。
インストルメンタを書いた人はASMライブラリを使用しました。
java - ASMを使用してJavaスタックの2番目に上位のオブジェクトにアクセスします
ASMを使用してフィールドアクセス(putfieldとgetfield)を監視しています。(putfieldの場合)私の問題は、スタックの最上位が基本値(X)で、2番目の最上位がオブジェクト参照(Y)である場合、2番目のオブジェクト参照を使用してメソッドを呼び出すJava命令を挿入するにはどうすればよいですか( Y)その1つの引数として、私のメソッドから戻った後、2つ(XとY)は失われませんか?</ p>
要約すると、JavaバイトコードレベルでJavaのスタックの最上位値に影響を与えることなく(アクセス後)、2番目の最上位オブジェクト参照にアクセスするにはどうすればよいですか?
dupを使用したいのですが、スタックの最上位値しか処理できません。したがって、値がなく、直接複製できるため、getfieldで機能します。
それを行うためのより良い方法はありますか?
ありがとう。