問題タブ [jasmin]

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 に答える
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 投票する
2 に答える
966 参照

java - JavaソースファイルよりもJasmin jファイルを生成する利点は何ですか?

.j ファイルは .class ファイルに変換され、.java ファイルは .class ファイルに変換されます。そう

javac ではなく Jasmin を選択するのはなぜですか? パフォーマンスコストはありますか?または、ジャスミンを好むその他の理由。

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

jvm - Jasmin文字列配列の宣言・初期化エラー

Jasmin コードを生成するコンパイラを作成しており、次のように配列宣言を作成したいと考えています。

これにより、現在、次のコードが生成されます。

これが正しい方法だと思っていましたが、次のエラーが発生しています。

間違った順序でスタックにプッシュしていませんか? または、newarray 行で char とは異なる型を使用する必要があります。もしそうなら、文字列に使用する正しい型は何ですか?

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

jvm - Jasmin 呼び出しローカル メソッドの結果は VerifyError になります

次のように、ローカル メソッド pow() を呼び出そうとしています。

私のクラスはこんな感じです。

ただし、これにより次のエラーが発生します。

ここで何が間違っていますか?

編集:私の完全なコードは以下のとおりです。pow() は、最初の値を 2 番目の値で累乗するメソッドであることに注意してください。

完全なクラス:

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

jvm - Jasmin は引数を使用してメソッドを呼び出します

Jasmin コードを生成するコンパイラを作成しており、次のように引数を使用してメソッドを呼び出したいと考えています。

これは次のようにコンパイルされます。

ただし、これにより次のエラーが発生します。ここで何が間違っていますか?

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

java - ジャスミンでロングを印刷するには?

次のようにジャスミンで整数を出力できます。

printlnlong (64 ビット整数) を出力するための引数は何ですか?

試してみ invokevirtual java/io/PrintStream/println(L)Vましたが、アセンブラから、これ(L)Vは不正な署名であると表示されます。(注:System.outこのメソッドを呼び出そうとすると、 long と long の両方がスタックにあります。)

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

java - Java のインポート、アセンブリ (Krakatau)、およびソース コード

だからここに私の状況があります:

CPU 使用率の高い Java クライアント/サーバー アーキテクチャを実行しており、メインの「サーバー」スレッドの遅延時間を短縮しようとしています。CPU を占有するコードを特定するために、YourKit を使用してサーバーのプロファイリングを行っています。

問題は:

私は他人のコードを使用していますが、その書き方のせいで、私がアクセスできない特別な難読化ツールを使用せずに逆コンパイルしてから再コンパイルすることは不可能です (いいえ、私は著作権などに違反していません)。

私が現在していること:

難読化を心配せずにクラス ファイルを変更するために、Storyyeller のすばらしい Krakatau 逆コンパイラ ( https://github.com/Storyyeller/Krakatau ) を使用して、クラス ファイルをアセンブリ ファイルに逆アセンブルしました。

Jasmin のリファレンス ページを見ながら手動で .j アセンブリ ファイルを編集し (これには永遠に時間がかかり、よく失敗します)、それらをクラス ファイルに再アセンブルし、再度実行します。

私がしたいこと:

アセンブリを入念に編集するのではなく、.java ソース コードを .j アセンブリ コードに変換する方法を知っている人はいますか?

また、.class ファイルを単純に逆コンパイルした場合、インポート用のパッケージが存在しない場合でも単純に再コンパイルすることはできますか?

誰かが私がこれを行うことができる方法を知っていれば、本当に感謝しています!