問題タブ [bcel]
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 - bcel を使用しながらメソッドのスタックマップを構築する
特定の命令の前に呼び出しを挿入してメソッドを変更しようとしています。私のインストルメンテーションは、bcel パッケージ自体によって自動生成できない別のスタックマップ テーブルになるようです。そのため、インストルメント化されたクラス ファイルに古いスタックマップ テーブルが含まれているため、jvm でエラーが発生します。すべてのコード属性を削除できる MethodGen のメソッドである removeCodeAttributes を試しました。たとえば、ラップされた関数など、単純なケースで機能します。そして、今の私の場合はうまくいきません。
java - 「new Class[]{String.class}」をスタックに置く BCEL コード例
java.lang.Class のインスタンスを含むサイズ 1 の配列を作成し、その唯一の要素を java.lang.String.class への参照で初期化する方法に関する BCEL コード例を探しています。
つまり、「new Class[]{String.class}」をスタックに置くための BCEL コード サンプルを探しています。
ありがとう。
java - BCEL - クラス名、要素名、メソッド名を取得する
bcel classparaser を使用してクラス名、要素名、およびメソッド名を取得する方法は? 私はすでにクラス名を取得する方法を見つけていますが、要素とメソッドの名前は何か間違っています。誰でもそれで私を助けることができますか? これが私のコードです(いくつかのエラーがあり、完了していません):
java - メソッド本体内の中間ローカル メソッド呼び出しを計測する
私は知っています(少なくともBCELまたはASMのいずれかを使用して)、何らかの方法でメソッドのローカル変数にアクセスすることは可能です...しかし、もっと何かが必要です。私が望むものは次のとおりです。
- そのような変数の型を取得する (または署名から変換する方法)
- この変数がいつ使用されるかを知る(区別する)(値が影響を受けるか、パラメーターとして渡されるかのいずれか)
- この変数がパラメーターとして使用される場合、どのメソッド呼び出しに渡されたかを知るために
- それぞれのメソッド呼び出しで「メソッドチェーン」を壊し、戻り値を取得して操作できるようにする
基本的な考え方は、デバッガーと同じようにメソッドを「インスツルメント」したいということです (ただし、最初のフレームの深さに制限されています...)。
どんなポインタでも感謝します。さらに情報が必要な場合は、お気軽にお問い合わせください。
java - Javaコンパイラにシンボリック定数フィールド参照をクラスファイルに含めさせます - 可能ですか?
Java コンパイラがコンパイル時に他のクラスから定数フィールド値を取得することはよく知られています。結果のクラス ファイルには、そのような定数の (任意の型の) 定数プール エントリは含まれません。
Q: コンパイラにそれを行うように指示できますか? (Oracle JDK 7 がいいでしょう)
out.println(some.other.class.FOO)
例として、 FOO (たとえばpublic static final int FOO = 1234
) を読み取り、それを出力するコードを考えてみ
ましょう。問題なく参照を見つけることができますprintln
が、定数は匿名に変わりsipush 1234
ます。
クラス レベルの依存関係の分析では、ここで透明性を確保できれば素晴らしいことです。変更された値を依存コードに何らかの形で表示するように求めているわけではないことに注意してください(それに関する他のSOの質問の負荷を参照してください)...
javac への Java Compiler API プラグインについて考えていますが、それは少し大げさなように聞こえますか? 何か案は?
java - javaagent での実行時に「java.lang.NoClassDefFoundError」を取得する
BCELを使用して javaagent.jar で jar ファイル ( main.jar ) を計測しようとしています。基本的に、バイトコードで aload を見つけるたびに、クラス「someclass」を使用して Fun() という静的関数への関数呼び出しを挿入しようとしています
私の「someclass」クラスはjavaagent.jarにあります
実行中
また
または(「someclass」用に someclasscontained.jar という別のjarを作成しました)
私は得ています
エラー。-bootclasspath/pオプションを試しましたが、まだ動作しません。誰も手がかりを持っていますか?
(1) すべての jar は同じフォルダーに存在します 2) この質問は 1 つの質問に似ている可能性がありますが、その質問に対する解決策は正しくない/満足のいくものではないため、重複のマークを付けないでください)
java - BCEL を使用したエラー「java.lang.VerifyError: StackMapTable エラー: オフセットが正しくありません」
私はBCELでJava計測を行っています。私のJavaエージェントは、tomcat8.0サーバーで実行されているJava Webアプリケーションに対してテストしています。JVM でロードされるすべてのクラスでインストルメンテーションを行わない場合 (または、java、javax... org.apache/* で始まるパッケージでインストルメンテーションを行わない場合)、正常に動作します。
しかし、Tomcat (パッケージ org.apache/*) でインストルメンテーションを行うと、「StackMapTable エラー: オフセットが正しくありません」というエラーが発生します。
インストルメンテーションが開始される前にTomcatが実行されていることを知っています。しかし、実行時のインストルメンテーションによると、インストルメンテーションは、ロード後ではなく、クラスがロードされようとしているときにのみ発生します.Tomcatはすでに実行されているため、これらのクラスはすでにJVMにあるため、JVMに持ち込まれた新しいクラスのみをインストルメント化するため、TomcatがすでにJVMにあるクラスに触れていないため、実行中かどうか。誰かがアイデアを持っていますか?