.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库的__result参数有什么作用?

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

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

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

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

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

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

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

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

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

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

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

➡️

继续阅读