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

jvm-bytecode - Java .class バージョンを読み取って表示するツール

.class ファイルを検索し、コンパイルされたバージョンを表示するツールを知っている人はいますか?

16進エディタで個別に見ることができることは知っていますが、見なければならないクラスファイルがたくさんあります(私の巨大なアプリケーションの何かが何らかの理由でJava6にコンパイルされています)。

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

java-bytecode-asm - 動的 Java バイトコード操作フレームワークの比較

動的なバイトコードの生成、操作、およびウィービング用のフレームワークがいくつかあります (BCEL、CGLIB、javassist、ASM、MPS)。それらについて知りたいのですが、それらすべてについてすべての詳細を知る時間はあまりないので、一方と他方の長所と短所を示した比較表のようなものと、その説明を見てみたいと思います。どうして。

ここSOで、似たようなことを尋ねる多くの質問を見つけました.答えは通常、「cglibまたはASMを使用できます」、または「javassistはcglibよりも優れています」、または「BCELは古くて死にかけています」または「ASMはX と Y が得られるので最適です。」これらの回答は役に立ちますが、私が望む範囲で質問に完全に答えるわけではなく、それらをより深く比較し、それぞれの長所と短所を示しています。

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

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でしょうか? デクサー自体のバグ?

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

android - Dalvik バイトコードの「スロー」と「例外の注釈」

バイトコードが次のように生成される理由

それよりも.throws Ljava/io/FileNotFoundException

throws FileNotFoundExceptionメソッドがJavaコードのヘッダーで宣言されている場合?

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

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

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

java - Java バイトコード署名

私が取り組んでいるプログラミング言語のコンパイラの一部として、解析して AST に変換しようとしているバイトコード内の一般的な署名に遭遇しました。解析アルゴリズムはほとんど機能しますが、これらの署名の形式が少し奇妙な動作をする特殊なケースがあるようです。これらのケースのいくつかを次に示します。

これらのクラスのすべてのメソッドのうち::、署名に含まれているのはこれらだけです。私の質問は、このトークンが何をするのか、なぜそれが存在するのかです。

編集

Java 言語::の演算子については知っていますが、これはバイトコード レベルのものです。

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

java - JVM 定数プール エントリ

いくつかのクラスで実行した出力を見るとjavap、次の奇妙な点に遭遇しました。

一部のクラスの定数プールには、次のようなエントリが含まれています。

これらの定数が定数プールに表示されるのはなぜですか?

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

java - ICMP 命令がないのはなぜですか?

ご存知かもしれませんが、さまざまなタイプのプリミティブ値を比較するためのオペコードがたくさんあります。

明らかな理由から、命令セットの作成者はすべてIF_LCMPEQの , IF_FCMPLT, ... 命令を追加することを気にしませんでしたがICMP、特にブール値またはInteger.compare(int, int).

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

java - 出力値を持つ ASM Try/Catch ブロック

現在、カスタム コンパイラで式として使用できるようにしようとtry/catchしています。つまり、スタックに値を残しています。型チェッカーとバックエンドはすでにこれをサポートしていますが、問題は ASM のCOMPUTE_FRAMES. 以下のインストルメンテーションのコードを使用します。

このコードのコンパイル:

VerifyErrorクラスのロード時に次のようになります。

try/catchASM が出力値を持つブロックのスタック フレームを計算する際に問題があるとは思わないので、インストルメンテーション コードに問題がありますか? (ClassWriter.getCommonSuperclassはここでは必要ありませんが、正しく実装されていることに注意してください。)