实例方法和静态方法有区别吗?
💡
原文中文,约3100字,阅读约需8分钟。
📝
内容提要
实例方法和静态方法在声明上有区别,但在实现上完全一致。它们都是用于处理输入参数的操作,没有上下文对象。通过Hijack方式可以替换实例方法。具体实现是通过获取方法的指针地址,计算偏移量,并使用Marshal.Copy方法修改原始方法的指令。
🎯
关键要点
- 实例方法和静态方法在声明上有区别,但在实现上完全一致。
- 实例方法作用于具体的上下文对象,静态方法不涉及上下文对象。
- 从函数的角度看,实例方法和静态方法都是处理输入参数的操作。
- 以IntValue类型为例,实例方法和静态方法的实现相同,都是返回_value字段。
- IL指令显示实例方法和静态方法的调用过程相同,都是普通函数。
- 实例方法将目标对象作为第一个参数,与静态方法没有本质区别。
- 可以使用Hijack方式替换实例方法,演示了如何将AsInt32方法替换为AlwaysMaxValue方法。
- Hijack方法通过获取方法指针地址和计算偏移量来篡改原始方法的指令。
➡️