![]() | 1 2bab 2021-06-29 19:50:34 +08:00 JVM TI 应该可以 |
![]() | 2 kiracyan 2021-06-29 19:51:19 +08:00 匿名函数? |
3 yitingbai 2021-06-29 19:51:46 +08:00 可以的, 你可以了解一下动态代理 |
4 goinghugh 2021-06-29 20:07:25 +08:00 jvm-sanbox? btrace? 运行期不重启 JVM 的 AOP |
5 ccde8259 OP @yitingbai 动态代理可以,相应的限制 A 只能是 Interface,如果是 Class 的话就无能为力。 类似 CGLIB 的字节码增强技术,并不能操作实例化后的对象。 |
6 yitingbai 2021-06-29 20:36:00 +08:00 @ccde8259 通用的替换方法那就是 Hook 了, 我在 Android 中经常使用, 有很多 Hook 框架, 但是 Java 这块我还真没研究过, 理论上来说应该也是有的 |
7 zifangsky 2021-06-29 20:39:53 +08:00 还有一种思路,自定义 ClassLoader 重新加载一个修改后的实例 B |
8 ccde8259 OP @zifangsky 如果重新加载的话,实例 B 还会是实例 B 嘛……比如 C 对象持有 B 的引用的情况下,能否在不变更这个引用的前提下实现这种替换? |
![]() | 9 siweipancc 2021-06-30 09:21:23 +08:00 via iPhone :D 你是要实现一个 jrebel |