gpt4 book ai didi

java - 反编译JavaEE

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:13 25 4
gpt4 key购买 nike

我们有一个 Java EE 应用程序,但供应商已不存在(由于破产)。不幸的是,我们必须对应用程序的功能进行一些更改,这意味着对 JavaEE 应用程序进行逆向工程。

我们使用 JD-GUI 对大约 70% 的应用程序/类进行逆向工程,然后手动调整它们以在 Eclipse 中构建。

然而,其余部分并不容易构建,因为它们是由代码生成器生成的?我可以使用哪些工具来提供进一步的帮助?

编辑:

这是困难的一个例子:

return ((SchemaTypeSystem)Class.forName(
"org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl",
true,
class$schema$system$s322D2AAD7A06BA82525CDB874D86D59A$TypeSystemHolder.getClassLoader())
.getConstructor(new Class[] { Class.class })
.newInstance(new Object[] { TypeSystemHolder.class }));

很难知道是什么

class$schema$system$s322D2AAD7A06BA82525CDB874D86D59A$TypeSystemHolder.getClassLoader())

最佳答案

试试 JAD ( http://www.varaneckas.com/jad)。

您显示的有问题的代码等同于以下内容:

1) Class class$schema$system$s322D2AAD7A06BA82525CDB874D86D59A$TypeSystemHolder;
2) ClassLoader loader = class$schema$system$s322D2AAD7A06BA82525CDB874D86D59A$TypeSystemHolder.getClassLoader();
3) Class type = Class.forName("org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl", true, loader);
4) Constructor ctor = type.getConstructor(Class.class);
5) Object obj = ctor.newInstance(TypeSystemHolder.class);
6) SchemaTypeSystem result = (SchemaTypeSystem) obj;
7) return result;

您遇到问题的部分是第 1 行,它表示局部变量或字段(可能是静态的)。 Java 编译器将表达式“TypeSystemHolder.class”转换为对 getClass 的调用,将结果存储在静态字段中。此初始化在每个引用“TypeSystemHolder.class”的类中发生一次,并且编译器将使用此表达式的每个调用点替换为字段访问。

大多数反编译器都无法将这个习惯用法转换回对“TypeSystemHolder.class”的原始调用,但 JAD 处理得很好。此外,还有一个将 JAD(和其他)集成到 Eclipse 中的插件 (http://jadclipse.sourceforge.net)。

不幸的是,反编译器不会处理编译器生成的每个代码序列,因此始终需要进行一些手动重写。例如,Java 编译器可能会为一个异常处理 block 生成与另一个异常处理 block 的代码重叠的代码。反编译器无法将其分离回两个 catch block 。在这种情况下,人们通常会看到 goto 语句散落在整个代码中(不是有效的 Java),或者反编译器会简单地放弃该方法。

此外,您认为这是生成的代码是正确的。具体来说,它来自XmlBeans编译器,它解析xn XML Schema并为Java生成绑定(bind)类;允许对符合该模式的 XML 文档进行序列化和反序列化。如果您有权访问架构,最好将 XmlBeans 合并到您的构建中,而不是反编译这些类。

关于java - 反编译JavaEE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2145840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com