問題タブ [bytecode-manipulation]

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 に答える
702 参照

java - ASM を使用して Java クラス ファイル内のメソッドから別のメソッドにオペコードをコピーするにはどうすればよいですか?

ここにいくつかのコードがあります。

これら 2 つのメソッドは同等のアクションを実行します。最初のメソッドの 2 番目のパラメータは疑似引数なので、元のコードをクリアして、このメソッドを次のようにしたいのですが...

どうすればこのアクションを実行できますか? 私はこのようにしてみました。

ただし、null ポインター例外がスローされます。理由は何ですか?

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

android - Dexmaker を使用して既存のクラスのメソッドをオーバーライドすることは可能ですか?

コードをプロキシまたは生成することにより、 Dexmaker使用して既にロードされているクラスのメソッドの動作を実行時に変更することは可能ですか?

アップデート

一言:Androidフレームワークからではなく、自分のアプリケーションからメソッドを追加/既存のメソッドを変更したいです。

0 投票する
5 に答える
2206 参照

java - Java クラスへのプログラムによる注釈の追加

使用例:
クラス フィールドにカスタム アノテーション @MyContainer を配置し、そのようなすべてのフィールドに関連する Hibernate アノテーションを (フィールド タイプとプロパティに応じて) 自動的に追加します。
さらに、JAXB XmlType アノテーションをクラスに追加し、型名をクラス名に基づいて作成する必要があります。
さらに、タイプなどに基づいてフィールドに注釈を追加したいと思います。追加されたすべての注釈は、実行時に使用できるようにする必要があります (したがって、hibernate / JAXB はそれらを見つけることができます)。
次のオプションを認識しています。

  1. 前処理クラス ソース (不適切なオプション)
  2. javax.annotation.processing API によるコンパイル時の処理
  3. Java Assist などのツールを使用したコンパイル後の操作
  4. java.lang.instrument API を使用したクラスのロード中の操作
  5. AspectJでそれを行う(十分に強力ではありません)

私の主な目標は次のとおりです。

  1. デバッグのためにクラスとソース間の同期を維持する
  2. Maven と IDE (Eclipse / Intellij) の両方からの作業をサポート

すでにそのようなことを行っている人が、そのようなタスク (およびおそらく潜在的な落とし穴) に最適なアプローチを推奨できるかどうかを評価します。

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

java - 空のスタックからオペランドをポップできません

ASM 4 を使用しています。別の言語からオンザフライでバイトコードを生成しています。以下を生成していますが、何が起こっているのかわかりません。私の推測では、try/catch ブロックがスタックに干渉していると思われます。最初の 2 行は Lambda2 をロードしています。これは最後にスタックの最も深い項目である必要がありますが、途中でそれが消えている理由がわかりません。

命令 13 でスタックが消えるようです。ここで、try/catch ブロックに入ります。スタックは、try/catch ブロックに入ると捨てられますか? もしそうなら、それは問題を説明するでしょう。

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

java - Java ASM4:super(ASM4);?

さて、私はASM4バイトコードライブラリのPDFチュートリアル/ドキュメント/本(もしそうなら)を読んでいました。私は例を試し、コードを読んで実際に入力し、実行してから出力から学習することで、学習しながら学びました。私はこの部分に出くわしました:

リンクは次のとおりです。http://download.forge.objectweb.org/asm/asm4-guide.pdf

スーパーで何を渡すのかわからない。私のIDEもあまり役に立ちませんでした。

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

java - Javassist:Bytecode.get()が機能していません

bc.get()は何も返しません。私の目的は、クラスのバイトコードを取得することです。

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

java - javassist バイトコード操作と Maven コンパイルの統合

javac/aspectj コンパイラでコンパイルする Maven プロジェクトがあります。
コンパイルされたクラスを操作してそれらに追加するjavassistプログラムをコンパイルしたクラスで実行したい。
「プロセスクラス」フェーズを使用してツールを実行することを考えました。
私の質問は、「ターゲット/クラス」で作成されたクラスファイルをjavassistで反復処理して、後でロード、修正、保存できるようにする最良の方法は何ですか.
もう 1 つの要件は、テスト クラスでもツールを実行することです。
同様のことを行うオープン ソース プロジェクトがある場合は、実際の例を参照してください。
ありがとう、
アヴナー

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

constants - メソッドレベルでのバイトコードの計測

上記のコードでは、 ifステートメントでバイトコードを計測しています。IFEQIF_ICMPNEなどの定数を使用して、バイトコード内のifステートメントを検索しています。すべてのメソッドでバイトコードを計測したい。これを行うためにどの定数を使用できますか? またはどのように可能ですか?

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

java - JSR308「instanceof@MyAnotations」ランタイムチェックを実装するコードを生成します

JSR 308は、Javaに型注釈を追加することを提案しています。承認後、プログラマーはJavaタイプが現在許可されている場所であればどこでも注釈を追加できるようになります。これには、メソッド/フィールド/ローカル/パラメーターの装飾だけでなく、コンストラクター呼び出し、型キャスト、そして最も不思議なことにインスタンスのチェックも含まれます。Checker Frameworkは、 JSR 308を使用し@NonNullて、オブジェクト型や文字列などの型修飾子を実装@Regexします。

チェッカーが行うことは、コードを静的に分析することだけです。これがコンパイル時のチェックです。それはいいです。しかし、私が欲しいのは、実行時にチェックを実行できるメカニズムです。次のように宣言できます。

私も書くことができます:

ただし、これはと同じx instanceof Stringで、実行時チェックは実行されません。小切手で任意のコードを実行してブール値を返すことができるコンパイル時アノテーションプロセッサまたはランタイムバイトコードマニピュレータが必要です。instanceofこれはJavaで可能ですか?

0 投票する
3 に答える
388 参照

java - Java バイトコード操作 - ライセンスの問題?

コア Java クラス (sun.*) でバイトコード操作を行うユーティリティをリリースする場合、ライセンスの問題について心配する必要がありますか?

もう少しコンテキストを提供するには: 自動回帰テスト スイートを実行するために、オリジナルが呼び出されMockSystem.currentMillis()た場所に独自の実装を挿入する必要がありました。java.lang.System.currentMillis()

この小さなユーティリティは多くの開発者にとって役立つと思うので、私の (将来の)ライセンスされたコードが別の方法でライセンスされたコードを操作する場合に、何らかのライセンスの問題があるかどうか疑問に思っています。MIT