2010-11-30 15 views
5

jsrキーワードは何を意味しますか?私はいくつかのJavaコードを見ている、と私は次のことを気づいた

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

javacは、それは声明ではありませんし、セミコロンをキーワードjsr後に期待されていることを言って、それにチョーク。

私はいくつかのグーグルをしましたが、私はsome code containing the same thingを見つけました。これは意図的に(どちらもコンパイルすることはできませんでしたが)信じています。だからjsrは何をするのですか?どのようにしてコンパイルするためのコードを取得するのですか?

+2

回答ありません似たような質問http://stackoverflow.com/questions/2135864/are-these-encoded-codes – HeDinges

答えて

10

このコードがJava逆コンパイラから来ていることを確認しています。

JSR 432は、デコンパイラノートのように臭いがあります。デコンパイラは「ジャンプ」コードを検出しましたが、Java言語で表現する方法の手掛かりはありません。

+0

それはそれでなければなりません。私が見ているコードは、90%デコンパイルされたコードであると確信しています。ここで何をしようとしていたのか?または、元のソースを唯一のオプションにしていますか? –

+1

@マーク - 伝えるのは難しい。あなたは手でそれを修正しようとすることができますが、このメソッドのバイトコードを逆アセンブルし、アルゴリズムがどこで続行されているかを調べる必要があります。 432はバイトコードインデックスです。私はいくつかの機会にそれをやったので、技術的に可能です。 –

+0

Gotcha、ありがとう! –

3

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

EDIT

ググ例では、出力をデコンパイラ間違いである、とのJSRとの一部が原因難読化、バイトコードの変更/生成することにより、または逆コンパイラstuffupのいずれかであるように見えます。

0

list of Java keywordsにはありません。だから私はそれが意味を持っているとは思わない。そして、それをコンパイルすることは可能だとは思っていません。

+0

@downvoter - 説明できますか? – Bozho

1

JSRはJava Specification Requestの略です。

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

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

されている必要があります誰かが何らかの理由で非作業のチェックインをしたように私には思えます。

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

ミニ更新:私は誰かが難読化された署名済みjarファイルを作ったと言うだろう、このことから

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

、と誰でもそのコードを掲示し、それを逆コンパイル:下のコメントをご確認ください。

更新2:グーグル「JDコア」は、最初の結果としてhttp://java.decompiler.free.fr/を生成します。

+0

ええ、それは私がグーグルで見つけたものの例でしたが、私が個人的に見ているものは、とにかく逆コンパイルされたコードであると確信しています。面白い。 –

2

jsr 433は、有効なJavaステートメントではありません。 "Sub Routineへのジャンプ"を意味するVM命令です(詳細は、VM Specを参照してください)。逆コンパイラはバイトコード命令を理解していないため(おそらくそれは難読化されていた)、それを有効なJavaソースに逆コンパイルできなかったため、それを挿入しました。

+0

'javac'は' finally'ブロックに対してのみ 'jsr'命令を出すのに使われました。私はそれがそれ以上もないとは思わない。 –

0

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

簡単な説明

アドレス直ちにこの JSR命令の次 命令のオペコードのタイプ RETURNADDRESSの値として オペランドスタックにプッシュされます。

これはJVM book 2nd editionにあります。

関連する問題