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
|