- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为 StaticInitializer.class
的类文件,该文件已成功混淆。当我反编译它时,我得到以下结果,其中 IDE 给出编译器错误“无法从初始化程序中返回
”。删除“return
”语句可以解决该问题。但实际上我想知道的是,如果混淆的类文件在静态初始化程序中有一个 return
语句,它如何正常工作。
Java 文件的编译阶段和运行阶段之间是否存在不匹配,混淆会检测到并使用它们作为混淆的一种方式?
反编译代码
public class StaticInitializer {
static {
int a=12;
int b=34;
return ;
}
}
编辑:以下操作显示混淆后的class文件是用jdk 1.5编译的
javap -c StaticInitializer.class
major version: 49
J2SE 8 = 52,J2SE 7 = 51,J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,JDK 1.3 = 47,JDK 1.2 = 46,JDK 1.1 = 45
最佳答案
反编译器永远不会 100% 准确,因为对任何代码行进行编程都有多种方法。 ALso JAD(当我们说 Java 反编译器时,它几乎是 JAD 的同义词)不支持 JDK 1.5 及更高版本。它不再被开发或维护。
另外查看反编译代码,它会给出错误,因为从 Java 7 开始,它会在加载类之前查找 main 方法。这是对以前的 java 版本的更改,因此您的静态 block 没有执行。在以前的版本中,JRE 的行为是在加载类后和执行静态 block 后查找 main 方法。所以它可以在以前的版本中工作,但不能在新版本的java中工作。但由于 JAD 不再维护,它可能会向您显示曾经有效的过时代码。
关于java - 反编译混淆代码 "Cannot return from within an initializer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24321724/
我是一名优秀的程序员,十分优秀!