如题,最近在写一个.NET 方法注入的工具,类似 java asm 那样在运行时修改方法的方案。 遇到了一些问题,圈子里面研究这个的太少了,来 V 站找找大佬。
看看有没有熟悉 MSIL 、PE Metadata 布局、CLR 源码、CLR Profiler API 的大佬,或者对这个感兴趣的朋友,都可以一起交流交流。
1
Chad0000 2022-09-05 18:43:14 +08:00
不是大佬,建议你描述一下你为什么需要在运行时修改方法。
|
2
INCerry OP @Chad0000 比如一般的 AOP 、APM 、故障注入、日志诊断,类似 java arthas 中的一些功能,都需要动态方法注入
|
3
ijrou 2022-09-06 05:16:05 +08:00
在运行时修改方法的方案
这不是在内存修改吗? |
5
coder001 2022-09-11 09:50:37 +08:00
虽然不太清楚 OP 的需求,如果没了解过 Harmony 的话,可以看看
这个库经常被拿来做 Unity 游戏 Mod ,可以运行时替换方法或者操作码( IL 指令) https://github.com/pardeike/Harmony 我甚至用来给系统基础类库打补丁,有个 Winform 控件的默认实现有不符合预期,给补丁掉了 https://topcl.net/custom-technology/painless-fix-BUG-in-winform-NumericUpDown-Hexadecimal-mode.html |
6
INCerry OP @coder001 嗯 感谢回复,Harmony 这个库我有研究过,它通过修改 JIT 以后的汇编代码,插入 jmp 指令的方式跳转到新方法。
不过遗憾的是它不能满足我的需求,因为它对分层编译和泛型方法的支持有限。 |
7
codelover2016 2022-09-22 00:38:22 +08:00
我都觉得这是个广告帖子了。
不过我觉得 AspectCore.DynamicProxy 能帮到你。 |
8
INCerry OP @codelover2016
不明白您所指的广告贴是什么意思? 您所说的工具很遗憾它不能满足我的需求,它只能通过创建 proxy 或者重写 virtual 方法来实现 aop ,无法真正的做到修改任意方法的 MethodBody ,局限性比较大,无法实现任意插桩。 |
9
codelover2016 2023-01-09 17:01:25 +08:00
@INCerry 没撒,我原以为是要推广你自己的一些库,现在看起来不是。我依稀记得有大佬在知乎分享过他的方案,晚点我翻翻看能不能找到~
加油(^-^)V |