.NET外挂系列:5. harmony 中补丁参数的有趣玩法(下) - 一线码农

💡 原文中文,约3800字,阅读约需9分钟。
📝

内容提要

本文介绍了Harmony库的补丁参数,如__result、__args和___fields,展示了如何通过这些参数修改方法的返回值和请求URL。示例代码演示了如何拦截DateTime.Now和HttpClient.SendAsync方法,改变其输出和请求地址,体现了Harmony的强大功能。

🎯

关键要点

  • 本文介绍了Harmony库的补丁参数,包括__result、__args和___fields。

  • __result参数用于获取和修改被注入方法的返回值。

  • 示例代码展示了如何通过__result修改DateTime.Now的输出。

  • __args参数可以以object[]形式访问原方法的所有参数。

  • 示例代码展示了如何通过__args拦截HttpClient.SendAsync方法并修改请求URL。

  • Harmony支持同名参数法,可以直接接收与底层方法签名一致的参数。

  • 当参数为internal类型时,可以使用__n索引法访问参数。

  • ___fields参数用于读写当前实例的私有字段。

  • 示例代码展示了如何使用___fields为无名线程赋予默认名称。

🔎

延伸解读

Harmony库的强大功能

Harmony库通过补丁参数如__result、__args和___fields,允许开发者在运行时修改方法的行为。这种灵活性使得开发者能够在不修改原始代码的情况下,进行调试和功能扩展,尤其在处理复杂的系统时,能够有效提高开发效率。

补丁参数的使用风险

虽然Harmony提供了强大的功能,但使用补丁参数时需谨慎。错误的修改可能导致不可预知的行为,甚至引发系统崩溃。因此,在使用这些参数时,开发者应充分测试和验证修改的影响,确保系统的稳定性和安全性。

参数访问方式的灵活性

Harmony支持多种方式访问方法参数,如__args数组和同名参数法。这种灵活性使得开发者可以根据具体需求选择最合适的方式,提升代码的可读性和维护性。在处理复杂参数时,合理选择访问方式尤为重要。

延伸问答

Harmony库的__result参数有什么作用?

__result参数用于获取和修改被注入方法的返回值。

如何使用__args参数拦截HttpClient的请求?

可以通过__args参数以object[]形式访问原方法的所有参数,从而修改请求URL。

Harmony库支持哪些参数访问方式?

Harmony库支持object[] __args、__n索引法和同名参数法来访问原方法的参数。

如何使用___fields参数修改私有字段?

___fields参数可以用来读写当前实例的私有字段,通常用于修改类的内部状态。

可以给无名线程赋予默认名称吗?

可以,通过___fields参数为无名线程赋予默认名称,以便于调试。

如何通过Harmony库修改DateTime.Now的输出?

可以使用__result参数注入DateTime.Now方法,修改其返回值以去掉时分秒。

🏷️

标签

➡️

继续阅读