Domanda

sto guardando un po 'di codice Java, e ho notato la seguente:

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

induttanze javac su di essa, dicendo che non è una dichiarazione e che un punto e virgola è previsto dopo la parola jsr.

Ho fatto qualche Googling, e ho trovato po 'di codice che contiene la stessa cosa , che mi porta a credere che è lì intenzionalmente (anche se non erano in grado di farlo per compilare o). Così che cosa jsr fare? Come fa un codice ottenere lo contengono per compilare?

È stato utile?

Soluzione

Sono vicino in modo che questo codice è venuta da un decompilatore Java.

Il JSR 432 puzza come una nota decompilatore, dove il decompilatore trovato un codice "salto", ma non hanno la minima idea su come esprimerlo in linguaggio Java.

Altri suggerimenti

Probabilmente si sta guardando i risultati di decompilare un codice che il decompilatore non è stato in grado di affrontare. JSR è il mnemonico per il bytecode salto subroutine; vedi questa pagina un elenco. Così jsr 432 può significare chiamare un metodo privato all'indirizzo bytecode 432. Tuttavia, il decompilatore non può capirlo, quindi forse il metodo è sintetico, o qualcos'altro sta succedendo.

Modifica

esempio Googled avete trovato è uscita definitivamente decompiler, e sembra che la parte con le JSR è sia causa con offuscamento, byte di codice modifica / generazione, o da un decompilatore stuffup.

jsr 433 non è una dichiarazione di Java valida. Si tratta di un'istruzione di VM che sta per "Jump to Sub Routine" (Vedere la VM Spec per maggiori informazioni). Il decompilatore inserito perché non ha capito le istruzioni bytecode (forse è stato offuscato) e così non poteva decompilare in valida sorgente di Java.

JSR l'acronimo di Java Specification Request.

C'è probabilmente un errore di battitura in questo codice e che avrebbe dovuto essere

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

Mi sembra che qualcuno ha fatto un check-in non funzionante per qualche motivo.

Ma, guardando quel codice, sembra terribilmente artificiale, quindi è probabilmente decompilato codice, come già detto Andreas_D.

Mini update : controlla il commento in basso:

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

Da questo, direi che qualcuno ha fatto un file JAR firmato che è stato offuscato, e chi postato quel codice decompilato esso.

Aggiorna 2 : usare Google "JD core" rendimenti http: //java.decompiler .free.fr / come primo risultato.

Non è nel elenco di parole chiave Java . Quindi non credo che abbia un significato. E dubito che sia possibile compilarlo.

JSR (che sta per Jump sottoprogramma) fa parte della Java Virtual Machine Specification. Si tratta di un set di istruzioni per la JVM.

Breve descrizione

  

Indirizzo del codice operativo della   istruzione immediatamente dopo questa   istruzione JSR viene inserito nello   operando impilare come un valore di tipo    returnAddress .

Questo può essere trovato sulla JVM libro 2 ° edizione .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top