什么是Method Hook,也就是函数执行hook before 以及 after,通俗的讲就是函数执行前做手脚,执行后做点手脚
Method Hook的几种方式
- xposed
- jvmti
- asm/javasist + transform
如果要hook大量的method来说,xposed jvmti 带来额外性能开销,出于对apm需求 所以还是不得不掌握一项asm/javasist + transform 的方式
关于jvmti用法参考openjdk jvmti test github.com/openjdk/jdk…
经验告诉我还是使用asm+transform比较好,相比于javasist,无需添加classPath,举个例子 fun A(b:B) 如果B 没被添加classPath则该A方法无法被植入代码
asm+transform 推荐涛哥写的库:github.com/Vinctor/Uat… 完成度高,定制化选项足够
需要注意就是log 需要注意频次,不然导致执行卡顿甚至crash
- pltHook or inlineHook 定制Trace
github.com/wuyouuuu/wy…