MonoHook
MonoHook copied to clipboard
增加个快捷Hook的类
目前使用上来,hook一些多重载的方法的时候会有些麻烦,所以才有意搞了这个类
举个例子,下面只需要传入 hook的类型和方法名,则可自动搜索需要hook的目标类型与当前类型中的方法,两者方法签名一致的就会自动hook住
[InitializeOnLoad]
public class LogFilter
{
static QuickHook hook;
static LogFilter()
{
hook = new QuickHook(typeof(LogFilter));
hook.HookMethod(Debug.unityLogger.GetType(), "Log");
hook.HookMethod(Debug.unityLogger.GetType(), "LogFormat");
}
[MethodImpl(MethodImplOptions.NoOptimization)]
static void Log(ILogger logger, LogType logType, string tag, object message, Object context)
{
if (logType == LogType.Log)
{
var msg = message?.ToString();
if (context == null && string.IsNullOrEmpty(tag) && !string.IsNullOrEmpty(msg))
{
// 测试数据
if (msg.Contains("test"))
LogProxy(logger, logType, tag, message, context);
}
}
else
{
LogProxy(logger, logType, tag, message, context);
}
}
[MethodImpl(MethodImplOptions.NoOptimization)]
static void LogProxy(ILogger logger, LogType logType, string tag, object message, Object context) { }
[MethodImpl(MethodImplOptions.NoOptimization)]
static void Log(ILogger logger, LogType logType, object message)
{
Log(logger, logType, null, message, null);
}
[MethodImpl(MethodImplOptions.NoOptimization)]
static void LogProxy(ILogger logger, LogType logType, object message) { }
[MethodImpl(MethodImplOptions.NoOptimization)]
static void Log(ILogger logger, LogType logType, object message, Object context)
{
Log(logger, logType, null, message, context);
}
[MethodImpl(MethodImplOptions.NoOptimization)]
static void LogProxy(ILogger logger, LogType logType, object message, Object context) { }
[MethodImpl(MethodImplOptions.NoOptimization)]
static void Log(ILogger logger, string tag, object message)
{
Log(logger, LogType.Log, tag, message, null);
}
[MethodImpl(MethodImplOptions.NoOptimization)]
static void LogProxy(ILogger logger, string tag, object message) { }
[MethodImpl(MethodImplOptions.NoOptimization)]
static void LogFormat(ILogger logger, LogType logType, string format, params object[] args)
{
Log(logger, logType, null, string.Format(format, args), null);
}
[MethodImpl(MethodImplOptions.NoOptimization)]
static void LogFormatProxy(ILogger logger, LogType logType, string format, params object[] args) { }
}