Что означает ключевое слово jsr?
Я смотрю на некоторый код Java, и я заметил следующее:
if (!foo(bar, baz, qux)) {
i = 0; jsr 433;
}
Javac давится этим, говоря, что это не оператор и что точка с запятой ожидается после ключевого слова jsr
.
Я немного погуглил и нашел некоторый код, содержащий то же самое, что заставляет меня думать, что он там намеренно (хотя они и не смогли заставить его компилироваться). Так что же делает jsr
? Как получить код, содержащий его для компиляции?
6 ответов:
Я почти уверен, что этот код исходит из декомпилятора Java.
JSR 432
пахнет как записка декомпилятора, где декомпилятор нашел "скачковый" код, но не имеет понятия о том, как выразить его на языке java.
Скорее всего, вы смотрите на результаты декомпиляции некоторого кода, с которым декомпилятор не смог справиться. JSR является мнемоникой для байт-кода подпрограммы jump; смотрите эту страницу для списка. Таким образом,
jsr 432
может означать вызов частного метода по адресу байт-кода432
. Однако декомпилятор не может понять этого, поэтому, возможно, метод синтетический, или происходит что-то еще.EDIT
Гугленный пример, который вы нашли, определенно является результатом декомпилятора, и похоже, что часть с JSRs вызвана либо обфускацией, модификацией / генерацией байтового кода, либо загрузкой декомпилятора.
jsr 433
не является допустимым оператором Java. Это инструкция VM, которая расшифровывается как "перейти к подпрограмме" (смотрите VM Spec для получения дополнительной информации). Декомпилятор вставил его, потому что он не понимал инструкцию байт-кода (возможно, она была запутана) и поэтому не мог декомпилировать его в допустимый источник Java.
JSR означает запрос спецификации Java.
Вероятно, в этом коде есть опечатка, и это должно было быть
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: погуглите "Джей Ди кор" дает http://java.decompiler.free.fr/ в качестве первого результата.
Его нет в спискеключевых слов Java . Поэтому я не верю, что это имеет какое-то значение. И я сомневаюсь, что это возможно скомпилировать.
JSR
(что означает подпрограмма перехода) является частью спецификации виртуальной машины Java. Это набор инструкций для СПМ.Краткое описание
Адрес кода операции инструкция сразу после этого в JSR инструкция помещается в стек операндов как значение типа обратный адрес .
Это можно найти наJVM book 2nd edition .