jsr关键字是什么意思?

时间:2010-11-30 10:01:14

标签: java jsr

我正在查看一些Java代码,我注意到以下内容:

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

javac嘲笑它,说这不是一个声明,并且在关键字jsr之后预计会出现分号。

我做了一些谷歌搜索,我找到some code containing the same thing,这让我相信它是故意的(即使他们也无法编译)。那么jsr做了什么?如何获得包含它的代码进行编译?

6 个答案:

答案 0 :(得分:10)

我很接近这个代码来自Java反编译器。

JSR 432闻起来像一个反编译注释,反编译器发现了一个“跳转”代码但没有关于如何用java语言表达它的线索。

答案 1 :(得分:3)

您很可能会查看反编译无法应对的某些代码的结果。 JSR是跳转子程序字节码的助记符;有关商家信息,请参阅this page。因此jsr 432可能意味着在字节码地址432调用私有方法。但是,反编译器无法解决这个问题,所以也许这个方法是合成的,或者其他的东西正在进行中。

修改

你发现的googled示例肯定是反编译器输出,看起来JSR的部分是由混淆,字节码修改/生成或反编译器填充引起的。

答案 2 :(得分:2)

jsr 433不是有效的Java语句。它是一个VM指令,代表“跳转到子例程”(有关更多信息,请参阅VM Spec)。反编译器插入它是因为它不理解字节码指令(可能是它被混淆了),因此无法将其反编译成有效的Java源代码。

答案 3 :(得分:1)

JSR代表Java Specification Request。

该代码中可能存在拼写错误,应该是

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 :Google搜索“JD core”会产生http://java.decompiler.free.fr/作为第一个结果。

答案 4 :(得分:0)

它不在list of Java keywords中。所以我不相信它有任何意义。我怀疑是否可以编译它。

答案 5 :(得分:0)

JSR(代表Jump Subroutine)是Java虚拟机规范的一部分。它是JVM的指令集。

简要说明

  

的操作码的地址   紧随其后的指示   jsr指令被推到了   操作数堆栈作为类型的值    returnAddress的

可以在JVM book 2nd edition上找到。