問題タブ [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 投票する
2 に答える
537 参照

java - Synchronized Block は、バイトコード レベルで Try-Finally ブロックに単純化できますか?

Java に似た言語用に独自のコンパイラを作成していますが、コンパイルに問題がありsynchronized blocksます。try-finallyそれらをブロックに単純化するために、次のアイデアを思いつきました。

と交換可能

および は、および命令_monitorEnter_monitorExit表します。MONITORENTERMONITOREXIT

synchronizedがどのようにコンパイルされるかというこの仮定は正しいですか、それとも何か不足していますか?

編集

以前の実装では、ボディ内のreturnandthrowステートメントに対していくつかの特別な処理が行われていました。基本的に、すべてのlock変数とMONITOREXITそれらを各*RETURNorTHROW命令の前に手動でロードします。これはブロックによって処理されfinallyますか、それともこれらのチェックが必要ですか?

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

java - クラスからバイト配列としてバイトコードを取得する方法

実行時に生成されたもの (ディスク上にファイルがないもの) を含む任意のClassインスタンスが与えられた場合、クラスバイトを取得する方法はありますか?.class

0 投票する
0 に答える
164 参照

java - ASM Analyze MethodNode の失敗

MethodNode を直接作成して分析できるかどうか疑問に思っています。したがって、テストするコードを以下に記述します。

残念ながら、次の呼び出し時に例外がスローされ_analyzer.analyze()ます。

と の未設定が原因だと思いmaxStackますmaxLocalsmaxStackとを正しく計算してmaxLocals、ここで呼び出す必要があるようvisitMax()です。両方の値を計算せずに他の方法はありますか?

以前に使用した別の方法は、次のようなコードです。

これは機能しますが、MethodNode の複数回の訪問が含まれているため、私は好きではありません。

目的:

クラスインスタンスごとに MethodNode を生成したいのですが、各インスタンスは生成されたインスタンスへの参照を保持します。最初のコードでは、ClassNode とターゲット MethodNode を直接作成し、その間に let が_nodeターゲット MethodNode を直接指すようにするというのが私の考えです。このようにすると、ClassNode 全体へのアクセスは 1 回だけです。つまり、ClassNode の作成中に MethodNode を取得します。

2 番目の部分のコードについては、ClassWriter を使用してアクセスします。の後cw.visitEnd()、ClassNode、つまり を取得するために、再度アクセスする必要がありreader.accept(classNode, 0);ます。授業参観は2回あります。

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

android-studio - Kotlin Bytecode - IntelliJ IDEA で分析するには?

コンパイルされたバイトコードを見たいので、裏でどのように動作するかについてもっと学ぶことができます。IntelliJ IDEA 15を使用していますが、バイトコードを表示する方法が見つかりません。私は何が欠けていますか?

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

jvm - 完全な ASM コード例 (分析のみ)

エンドツーエンドの ASM の良い例はありますか?バイトコードの解析と分析のためだけのものですか? バイトコード生成に関する多くの例を見つけましたが、データフロー分析や制御フロー分析などの分析はどうでしょうか?

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

java - 単純な Java クラス用に生成されたバイトコードを理解する

私はこのブログをフォローして、Java からバイトコードへの学習を行っています。この SimpleClass のバイトコードを生成しました。

以下のようにバイトコードの位置を理解しています

  • 0 は「これ」
  • 1 は、スーパークラス Object のコンストラクターを呼び出すためのものです。
  • 4 - ?
  • 値 5 の場合は 5
  • 6 をスタックからポップし、変数に 5 を代入します。

aload_0しかし、私はポジション4とその目的を理解していませんか?