我正在看一些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书第二版.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top