5

私はいくつかのJavaコードを見ていますが、次のことに気づきました。

if (!foo(bar, baz, qux)) {
    i = 0; jsr 433;
}

javacは、ステートメントではなく、キーワードの後に​​セミコロンが必要であると言って、それを窒息させjsrます。

私はいくつかのグーグルをしました、そして私は同じものを含むいくつかのコードを見つけました、それは私にそれが意図的にそこにあると信じさせます(彼らはそれをコンパイルすることもできませんでしたが)。では、何をしjsrますか?それを含むコードをコンパイルするにはどうすればよいですか?

4

6 に答える 6

10

このコードはJavaデコンパイラーからのものであると確信しています。

JSR 432逆コンパイラーが「ジャンプ」コードを見つけたが、それをJava言語で表現する方法についての手がかりがない、逆コンパイラーのメモのようなにおいがします。

于 2010-11-30T10:05:39.123 に答える
3

jsr 433は有効なJavaステートメントではありません。これは、「Jump to SubRoutine」を表すVM命令です(詳細については、VM仕様を参照してください)。逆コンパイラーは、バイトコード命令を理解していなかったため(おそらく難読化されていたため)、有効なJavaソースに逆コンパイルできなかったために挿入しました。

于 2010-11-30T10:20:38.153 に答える
3

おそらく、逆コンパイラーが処理できなかったコードを逆コンパイルした結果を見ているでしょう。JSRは、ジャンプサブルーチンバイトコードのニーモニックです。リストについては、このページを参照してください。したがってjsr 432、バイトコードアドレスでプライベートメソッドを呼び出すことを意味する場合があります432。ただし、逆コンパイラーはそれを理解できないため、メソッドが合成であるか、何か他のことが起こっている可能性があります。

編集

あなたが見つけたGoogleの例は間違いなく逆コンパイラの出力であり、JSRのある部分は、難読化、バイトコードの変更/生成、または逆コンパイラの詰め込みが原因のようです。

于 2010-11-30T10:06:49.360 に答える
1

JSRは、JavaSpecificationRequestの略です。

そのコードにはおそらくタイプミスがあり、

if (!foo(bar, baz, qux)) {
    i = 0; //jsr 433;
}

誰かが何らかの理由で機能しないチェックインをしたように私には思えます。

しかし、そのコードを見ると、それはひどく人工的に見えるので、Andreas_Dがすでに述べたように、おそらく逆コンパイルされたコードです。

ミニアップデート:一番下のコメントを確認してください:

/* Location:           C:\Users\Matteo\Downloads\FreeDownApplet.signed.jar
 * Qualified Name:     FreeDownApplet
 * JD-Core Version:    0.5.4
 */

このことから、誰かが難読化された署名付きjarファイルを作成し、そのコードを投稿した人は誰でもそれを逆コンパイルしたと思います。

アップデート2:「JDコア」をグーグルで検索すると、最初の結果としてhttp://java.decompiler.free.fr/が生成されます。

于 2010-11-30T10:08:13.163 に答える
0

Javaキーワードのリストにはありません。ですから、意味がないと思います。そして、私はそれをコンパイルすることが可能であるとは思えません。

于 2010-11-30T10:07:26.260 に答える
0

JSR(Jump Subroutineの略)は、Java仮想マシン仕様の一部です。これは、JVM用の命令セットです。

簡単な説明

このjsr命令の直後の命令のオペコード のアドレスは、 returnAddress型の値としてオペランドスタックにプッシュされます。

これは、JVMブックの第2版に記載されています。

于 2010-11-30T10:24:13.880 に答える