java - 替换已编译的 .class 文件中的方法

标签 java reflection

这里有一个有趣的问题。所以我收到了一个 .jar,它被混淆了,这意味着当我反编译 .class 文件时,它并没有显示 100% 完美,所以我无法重新编译它。然而,我需要更改的唯一方法已被完美转换(但类没有))。有没有办法以某种方式更改 .java 代码并在类文件中注入(inject)替换方法而无需完全重新编译?

如果失败,我将转到字节码。

谢谢!

编辑:作为后续问题/或围绕替换整个方法的黑客攻击。我真的只是想更改该方法在本地生成的变量。如果有任何更好的方法可以做到这一点。

最佳答案

根据你真正想做什么,我不建议反编译/修改/重新编译代码(出于法律、维护、可理解性、可测试性的原因。)

字节码操作可能也不是最好的解决方案,但如果您想按照这种方式进行操作,请查看 ASM project ,它是一个被许多已知项目广泛使用的字节码操作框架。

如果我是你,我会首先尝试切面 (AspectJ)。切面的强大之处在于你不接触现有代码,而是告诉虚拟机在何时/之前/之后/就地做什么调用特定方法。它允许您通过以分离的方式编写自己的代码来指出确切的上下文和更改,增强代码的行为。

希望对您有所帮助。

关于java - 替换已编译的 .class 文件中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34330502/

相关文章:

远程对象中 javax.json.JsonValue 的 Java RMI NoClassDefFoundError

java - 类上对 newInstance 的简单反射调用的 InstantiationException?

java - 如何找到影响其他测试执行的测试?

java - 在 Android 中将嵌套的 Class<MyInterface<T>> 作为参数传递

java - 如何从用户输入字符串中获取日期、月份和年份,例如 25/03/2012

c# - MemberWiseClone 如何创建具有克隆属性的新对象?

android - 从 Android 中的外部 native 可执行文件调用 java 代码

java - 无法使用 java 中的反射调用带有变量参数的方法

java - 当前方法的完全限定方法名称

java : How garbage collection works for static final String object declared in interface and class