Question

Je suis à la recherche à un code Java, et je l'ai remarqué ce qui suit:

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

javac selfs sur elle, en disant ce n'est pas une déclaration et un point-virgule est attendu après le mot-clé jsr.

Je l'ai fait quelques recherches sur Google, et j'ai trouvé un code contenant la même chose , ce qui me porte à croire qu'il est là intentionnellement (même si elles ne sont pas en mesure de le compiler soit). Alors qu'est-ce jsr faire? Comment un code get contenant le compiler?

Était-ce utile?

La solution

Je suis proche de vous que ce code provient d'un décompilateur Java.

Le JSR 432 sent comme une note decompiler, où le décompilateur trouvé un code « saut », mais n'a pas la moindre idée sur la façon de l'exprimer dans le langage java.

Autres conseils

Vous êtes à la recherche le plus probable des résultats de décompilation du code que le décompilateur n'a pas été en mesure de faire face. JSR est le mnémonique pour le sous-programme de saut bytecode; voir cette page pour une liste. Alors jsr 432 peut signifier appeler une méthode privée à l'adresse bytecode 432. Cependant, le décompilateur ne peut pas comprendre cela, alors peut-être la méthode est synthétique, ou quelque chose d'autre se passe.

EDIT

exemple googlé vous avez trouvé est sortie définitivement décompilateur, et il semble que la partie des JSR est soit la cause par l'obscurcissement, la modification du code octet / génération, ou par un stuffup decompiler.

jsr 433 n'est pas une instruction Java valide. Il est une instruction machine virtuelle qui signifie « Aller au Sous-routine » (voir la VM Spec pour plus d'informations). Le décompilateur inséré parce qu'il ne comprenait pas l'instruction de bytecode (peut-être il a été obscurcie) et ainsi ne pouvait pas décompiler dans Java source valide.

JSR signifie Java Specification Request.

Il y a probablement une faute de frappe dans ce code et il aurait dû être

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

Il me semble que quelqu'un a fait un checkin de travail non pour une raison quelconque.

Mais, en regardant ce code, il semble terriblement artificiel, il est donc le code décompilé probablement, comme Andreas_D a déjà été dit.

Mise à jour Mini : vérifier le commentaire de fond:

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

De là, je dirais que quelqu'un a fait un fichier jar signé qui a été brouillées, et celui affiché que le code décompilé il.

Update 2 : Googling "JD cœur" rendements http: //java.decompiler .free.fr / comme le premier résultat.

Il est pas dans la liste des de Java. Donc, je ne crois pas qu'il ait un sens. Et je doute qu'il est possible de le compiler.

JSR (qui signifie Jump Subroutine) fait partie de la machine virtuelle Java Specification. Il est un jeu d'instructions pour la machine virtuelle Java.

Brève description

  

adresse de l'opcode du   instruction immédiatement après cette   instruction JSR est poussé sur la   empiler opérande en tant que valeur de type    returnaddress .

Ceci peut être trouvé sur le livre JVM 2ème édition .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top