問題タブ [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.
java - Synchronized Block は、バイトコード レベルで Try-Finally ブロックに単純化できますか?
Java に似た言語用に独自のコンパイラを作成していますが、コンパイルに問題がありsynchronized blocks
ます。try-finally
それらをブロックに単純化するために、次のアイデアを思いつきました。
と交換可能
および は、および命令_monitorEnter
を_monitorExit
表します。MONITORENTER
MONITOREXIT
synchronized
がどのようにコンパイルされるかというこの仮定は正しいですか、それとも何か不足していますか?
編集
以前の実装では、ボディ内のreturn
andthrow
ステートメントに対していくつかの特別な処理が行われていました。基本的に、すべてのlock
変数とMONITOREXIT
それらを各*RETURN
orTHROW
命令の前に手動でロードします。これはブロックによって処理されfinally
ますか、それともこれらのチェックが必要ですか?
java - クラスからバイト配列としてバイトコードを取得する方法
実行時に生成されたもの (ディスク上にファイルがないもの) を含む任意のClass
インスタンスが与えられた場合、クラスバイトを取得する方法はありますか?.class
java - ASM Analyze MethodNode の失敗
MethodNode を直接作成して分析できるかどうか疑問に思っています。したがって、テストするコードを以下に記述します。
残念ながら、次の呼び出し時に例外がスローされ_analyzer.analyze()
ます。
と の未設定が原因だと思いmaxStack
ますmaxLocals
。maxStack
とを正しく計算してmaxLocals
、ここで呼び出す必要があるようvisitMax()
です。両方の値を計算せずに他の方法はありますか?
以前に使用した別の方法は、次のようなコードです。
これは機能しますが、MethodNode の複数回の訪問が含まれているため、私は好きではありません。
目的:
クラスインスタンスごとに MethodNode を生成したいのですが、各インスタンスは生成されたインスタンスへの参照を保持します。最初のコードでは、ClassNode とターゲット MethodNode を直接作成し、その間に let が_node
ターゲット MethodNode を直接指すようにするというのが私の考えです。このようにすると、ClassNode 全体へのアクセスは 1 回だけです。つまり、ClassNode の作成中に MethodNode を取得します。
2 番目の部分のコードについては、ClassWriter を使用してアクセスします。の後cw.visitEnd()
、ClassNode、つまり を取得するために、再度アクセスする必要がありreader.accept(classNode, 0);
ます。授業参観は2回あります。
android-studio - Kotlin Bytecode - IntelliJ IDEA で分析するには?
コンパイルされたバイトコードを見たいので、裏でどのように動作するかについてもっと学ぶことができます。IntelliJ IDEA 15を使用していますが、バイトコードを表示する方法が見つかりません。私は何が欠けていますか?
jvm - 完全な ASM コード例 (分析のみ)
エンドツーエンドの ASM の良い例はありますか?バイトコードの解析と分析のためだけのものですか? バイトコード生成に関する多くの例を見つけましたが、データフロー分析や制御フロー分析などの分析はどうでしょうか?
java - 単純な Java クラス用に生成されたバイトコードを理解する
私はこのブログをフォローして、Java からバイトコードへの学習を行っています。この SimpleClass のバイトコードを生成しました。
以下のようにバイトコードの位置を理解しています
- 0 は「これ」
- 1 は、スーパークラス Object のコンストラクターを呼び出すためのものです。
- 4 - ?
- 値 5 の場合は 5
- 6 をスタックからポップし、変数に 5 を代入します。
aload_0
しかし、私はポジション4とその目的を理解していませんか?