题
我正在看一些Java代码,并且已经注意到以下内容:
if (!foo(bar, baz, qux)) {
i = 0; jsr 433;
}
Javac窒息了它,说这不是一个陈述,并且预计将在关键字之后进行半隆 jsr
.
我做了一些谷歌搜索,我发现 一些包含同一件事的代码, ,这使我相信它是故意的(即使他们也无法获得编译)。那么做什么 jsr
做?如何获得包含其编译的代码?
解决方案
我几乎可以确定此代码来自Java分解器。
这 JSR 432
闻起来像是一个反合式音符,在该音符中,分解器找到了“跳跃”代码,但对如何用Java语言表达它并不知道。
其他提示
您很可能会查看分解分解代码无法应对的代码的结果。 JSR是跳跃子例程字节码的助记符;看 这一页 用于清单。所以 jsr 432
可能是指在字节码地址上调用私有方法 432
. 。但是,分解器无法弄清楚,因此该方法可能是合成的,或者正在发生其他事情。
编辑
您发现的谷歌搜索示例肯定是分解器的输出,看起来JSRS的部分是通过混淆,字节代码修改 /生成或通过exompiler suffup引起的。
jsr 433
不是有效的Java语句。这是一项VM指令,代表“跳到子例程”(请参阅 VM规格 了解更多信息)。分解器插入它是因为它不了解字节码指令(也许是混淆),因此无法将其分配到有效的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
*/
从中,我会说有人制作了一个被签名的罐子文件,该文件被混淆了,谁发布了该代码将其分解。
更新2: :谷歌搜索“ JD核心”产量 http://java.decompiler.free.fr/ 作为第一个结果。
它不在 Java关键字列表. 。因此,我不相信它有任何意义。我怀疑是否可以编译它。
JSR
(代表跳跃子例程)是Java虚拟机规范的一部分。这是JVM的指令集。
简要描述;简介
这 地址 此JSR指令之后的指令的op码被推到操作数堆栈上,作为类型的值 退货地址.
这可以在 JVM书第二版.