jsr关键字是什么意思?
我正在看一些Java代码,我注意到以下内容:
if (!foo(bar, baz, qux)) { i = 0; jsr 433; }
javac嘲笑它,说它不是一个声明,并且在关键字jsr
之后预计会有分号。
我做了一些谷歌搜索,我发现一些代码包含相同的东西 ,这使我相信它是故意的(即使他们也无法编译)。 那jsr
做什么? 如何获取包含它的代码进行编译?
我很接近这个代码来自Java反编译器。
JSR 432
闻起来像一个反编译注释,反编译器发现了一个“跳转”代码但没有关于如何用java语言表达它的线索。
您很可能会查看反编译器无法处理的某些代码的反编译结果。 JSR是跳转子程序字节码的助记符; 请参阅此页面以获取列表。 因此, jsr 432
可以表示在字节码地址432
处调用私有方法。 但是,反编译器无法解决这个问题,因此该方法可能是合成的,或者其他方法正在进行中。
编辑
您发现的Google搜索示例肯定是反编译器输出,看起来JSR的部分是由混淆,字节码修改/生成或反编译器填充引起的。
jsr 433
不是有效的Java语句。 它是一个VM指令,代表“跳转到子程序”(有关更多信息,请参阅VM规范 )。 反编译器插入它是因为它不理解字节码指令(可能是它被混淆了),因此无法将其反编译成有效的Java源代码。
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 :谷歌搜索“JD核心”产生http://java.decompiler.free.fr/作为第一个结果。
它不在Java关键字列表中 。 所以我不相信它有任何意义。 我怀疑是否可以编译它。
JSR
(代表Jump Subroutine)是Java虚拟机规范的一部分。 它是JVM的指令集。
简要描述;简介
紧跟在此jsr指令之后的指令的操作码的地址被作为returnAddress类型的值压入操作数堆栈。
这可以在JVM第2版上找到 。