問題タブ [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.
jvm-bytecode - Java .class バージョンを読み取って表示するツール
.class ファイルを検索し、コンパイルされたバージョンを表示するツールを知っている人はいますか?
16進エディタで個別に見ることができることは知っていますが、見なければならないクラスファイルがたくさんあります(私の巨大なアプリケーションの何かが何らかの理由でJava6にコンパイルされています)。
java-bytecode-asm - 動的 Java バイトコード操作フレームワークの比較
動的なバイトコードの生成、操作、およびウィービング用のフレームワークがいくつかあります (BCEL、CGLIB、javassist、ASM、MPS)。それらについて知りたいのですが、それらすべてについてすべての詳細を知る時間はあまりないので、一方と他方の長所と短所を示した比較表のようなものと、その説明を見てみたいと思います。どうして。
ここSOで、似たようなことを尋ねる多くの質問を見つけました.答えは通常、「cglibまたはASMを使用できます」、または「javassistはcglibよりも優れています」、または「BCELは古くて死にかけています」または「ASMはX と Y が得られるので最適です。」これらの回答は役に立ちますが、私が望む範囲で質問に完全に答えるわけではなく、それらをより深く比較し、それぞれの長所と短所を示しています。
android - デデクサーを使用してこの逆アセンブル行を解釈する方法は?
以下は、Android マーケット アプリでdedexerinvoke-virtual
を使用して逆アセンブルされたスニップコードです。元の Java コードが何であるかわかりません。
invoke-virtual {v0},[Lcom/google/android/providers/AbstractGDataSyncAdapter$ClientDiffType;/clone ; clone()Ljava/lang/Object;
は[
配列であるはずですがclone
、タイプの配列の要素でメソッドを呼び出していcom/google/android/providers/AbstractGDataSyncAdapter$ClientDiffType
ますか? では、なぜ;
クラス名とメソッド名の間にあるのclone
でしょうか? デクサー自体のバグ?
android - Dalvik バイトコードの「スロー」と「例外の注釈」
バイトコードが次のように生成される理由
それよりも.throws Ljava/io/FileNotFoundException
throws FileNotFoundException
メソッドがJavaコードのヘッダーで宣言されている場合?
if-statement - if-else ステートメントのバイトコードを生成する方法
バイトコード命令 IF THEN - ELSE とオプションの ELSE 分岐に対応するコードを生成するにはどうすればよいですか?
たとえば、プログラム If-else.pas は正しいと見なされますが、プログラム If.pas は ELSE 分岐が含まれていないため、正しいとは見なされません。
If-else.pas
If.pas
だからJasminは私にこのエラーを与えます:
Output.j:62: JAS エラー: ラベル: コードに L11 が追加されていません。
Output.j: 1 件のエラーが見つかりました
私の文法 .g には次のルールがあります。
if-else ステートメントについては、次のように書きました。
ただし、このように 2 番目のブランチはオプションではなく、常に存在する必要があります。オプションにするにはどうすればよいですか?疑問符 ( ( 'else' s2 = stmt )?
) が必要だと思ったのですが、違います。私はANTLRを使用しています。
ありがとう。
Jasmin が生成するバイトコードファイル (.J) が役に立つかどうかわかりませんが、書いておきます。
If-else.j
場合.j
java - Java バイトコード署名
私が取り組んでいるプログラミング言語のコンパイラの一部として、解析して AST に変換しようとしているバイトコード内の一般的な署名に遭遇しました。解析アルゴリズムはほとんど機能しますが、これらの署名の形式が少し奇妙な動作をする特殊なケースがあるようです。これらのケースのいくつかを次に示します。
これらのクラスのすべてのメソッドのうち::
、署名に含まれているのはこれらだけです。私の質問は、このトークンが何をするのか、なぜそれが存在するのかです。
編集
Java 言語::
の演算子については知っていますが、これはバイトコード レベルのものです。
java - JVM 定数プール エントリ
いくつかのクラスで実行した出力を見るとjavap
、次の奇妙な点に遭遇しました。
一部のクラスの定数プールには、次のようなエントリが含まれています。
これらの定数が定数プールに表示されるのはなぜですか?
java - ICMP 命令がないのはなぜですか?
ご存知かもしれませんが、さまざまなタイプのプリミティブ値を比較するためのオペコードがたくさんあります。
明らかな理由から、命令セットの作成者はすべてIF_LCMPEQ
の , IF_FCMPLT
, ... 命令を追加することを気にしませんでしたがICMP
、特にブール値またはInteger.compare(int, int)
.
java - 出力値を持つ ASM Try/Catch ブロック
現在、カスタム コンパイラで式として使用できるようにしようとtry/catch
しています。つまり、スタックに値を残しています。型チェッカーとバックエンドはすでにこれをサポートしていますが、問題は ASM のCOMPUTE_FRAMES
. 以下のインストルメンテーションのコードを使用します。
このコードのコンパイル:
VerifyError
クラスのロード時に次のようになります。
try/catch
ASM が出力値を持つブロックのスタック フレームを計算する際に問題があるとは思わないので、インストルメンテーション コードに問題がありますか? (ClassWriter.getCommonSuperclass
はここでは必要ありませんが、正しく実装されていることに注意してください。)