最近在写一个.NET 方法注入的工具,遇到了些问题,看看在 V 站能不能找到大佬交流交流

2022-09-05 18:41:55 +08:00
 INCerry

如题,最近在写一个.NET 方法注入的工具,类似 java asm 那样在运行时修改方法的方案。 遇到了一些问题,圈子里面研究这个的太少了,来 V 站找找大佬。

看看有没有熟悉 MSIL 、PE Metadata 布局、CLR 源码、CLR Profiler API 的大佬,或者对这个感兴趣的朋友,都可以一起交流交流。

2385 次点击
所在节点    C#
9 条回复
Chad0000
2022-09-05 18:43:14 +08:00
不是大佬,建议你描述一下你为什么需要在运行时修改方法。
INCerry
2022-09-05 18:54:56 +08:00
@Chad0000 比如一般的 AOP 、APM 、故障注入、日志诊断,类似 java arthas 中的一些功能,都需要动态方法注入
ijrou
2022-09-06 05:16:05 +08:00
在运行时修改方法的方案
这不是在内存修改吗?
INCerry
2022-09-06 08:46:37 +08:00
@ijrou 对,可以这么认为,主要就是修改元数据和让 JIT 重新帮我们编译。
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
INCerry
2022-09-12 21:56:01 +08:00
@coder001 嗯 感谢回复,Harmony 这个库我有研究过,它通过修改 JIT 以后的汇编代码,插入 jmp 指令的方式跳转到新方法。
不过遗憾的是它不能满足我的需求,因为它对分层编译和泛型方法的支持有限。
codelover2016
2022-09-22 00:38:22 +08:00
我都觉得这是个广告帖子了。
不过我觉得 AspectCore.DynamicProxy 能帮到你。
INCerry
2022-09-22 09:37:53 +08:00
@codelover2016
不明白您所指的广告贴是什么意思?
您所说的工具很遗憾它不能满足我的需求,它只能通过创建 proxy 或者重写 virtual 方法来实现 aop ,无法真正的做到修改任意方法的 MethodBody ,局限性比较大,无法实现任意插桩。
codelover2016
2023-01-09 17:01:25 +08:00
@INCerry 没撒,我原以为是要推广你自己的一些库,现在看起来不是。我依稀记得有大佬在知乎分享过他的方案,晚点我翻翻看能不能找到~
加油(^-^)V

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/877886

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX