【发布时间】:2021-05-03 11:53:07
【问题描述】:
我有一个在 Java Tomcat 服务器上运行的旧应用程序的问题,并且该应用程序的源代码不完全可用,但 .class 文件显然都在 tomcat 服务器上运行。
我能否以某种方式操纵 .class 文件(由 JVM 使用)的字节码,以便我可以更改变量数据类型(因为这是必须要做的)?或者甚至将其逆向工程到其旧的 .java 源代码?
到目前为止,我已经使用了反编译器和 javap 命令。我能否以某种方式复制整个 Tomcat 应用程序并:
- 反编译
- 做我的改变
- 重新编译?
【问题讨论】:
-
这会不会产生滚雪球效应,要求您修改甚至依赖于您修改过的类的其他类?对于可能访问不会从已编译类中反编译的值的本机方法,您将如何处理?
-
是的,我知道这可能会发生,但该变量是上传操作到本地服务器的文件大小限制,他们希望它更大。所以基本上从客户的角度来看,我们被告知“我们知道我们在做什么”,无论这意味着什么......
-
这似乎有点幼稚。改变变量的类型不会改变程序逻辑。限制由存储在变量中的 值 施加。因此,您必须更改所有负责确定该值并将其分配给变量的代码。然后,有代码使用该变量。如果原始作者使用较小的数据类型创建变量,则使用它的代码不太可能处理较大的数据类型。这可能意味着执行实际上传的代码无法处理它。
标签: java jvm reverse-engineering bytecode