-
Notifications
You must be signed in to change notification settings - Fork 25
API Reference LawnMod
Mewnojs edited this page May 23, 2023
·
1 revision
这里的信息可能不会及时更新,请以代码注释为准
各种辅助MonoMod以及使用IronPython进行动态Hook的工具,例如将Python函数转为MonoMod.RuntimeDetour.DynamicHookGen可用的形式
Python装饰器,将Python函数转换为Hook一个C#方法所需的Delegate类型
参数:
-
funcOrMethoddesc要Hook的C#方法的Python封装
返回值:
一个装饰器,其接受Python函数,返回所需的Delegate类型
用法示例:
# 定义一个Hook函数
@LawnMod.MonoModUtils.As(要被Hook的方法)
def Hook函数(orig, *要被Hook的方法的参数):
# 修改"要被Hook的方法参数"或者其他操作
orig(*要被Hook的方法的参数) # 也可以不调用orig原函数而是拦截
MonoModUtils.On.要被Hook的方法 += Hook函数 # 应用Hook
MonoModUtils.On.要被Hook的方法 -= Hook函数 # 解除Hook# 定义一个Hook函数2
LawnMod.MonoModUtils.As(要被Hook的方法)(
lambda orig, *要被Hook的方法的参数: orig(*[对参数做某些操作(i,index) for index,i in enumerate(要被Hook的方法的参数)])
)
# 应用与解除Hook的方法与上面一致LawnMod.MonoModUtils.HookTo(dynamic funcOrMethoddesc, MonoMod.RuntimeDetour.DynamicHookGen.HookType hookType = OnOrIL)
Python装饰器,为Python函数Hook一个特定的C#方法 参数:
-
funcOrMethoddesc要Hook的C#方法的Python封装 -
hookTypeHook的类型,默认为MonoMod.RuntimeDetour.DynamicHookGen.HookType.OnOrIL
返回值:
一个装饰器,其接受Python函数,返回一个HookResult对象,通过此掌控Hook的生命周期
用法示例:
# 直接应用Hook到某个函数
@LawnMod.MonoModUtils.HookTo(要被Hook的方法, MonoMod.RuntimeDetour.DynamicHookGen.HookType.On)
def Hook函数会变成HookResult对象(orig, *要被Hook的方法的参数):
# 修改"要被Hook的方法参数"或者其他操作
orig(*要被Hook的方法的参数) # 也可以不调用orig原函数而是拦截
# 在此之后通过"Hook函数会变成HookResult对象"访问HookResult对象
# 手动指定参数调用Hook函数
Hook函数会变成HookResult对象(*指定参数)
# 解除Hook
Hook函数会变成HookResult对象.UnHook()