C# 三维party managed assembly的钩子方法解决方案

C# 三维party managed assembly的钩子方法解决方案,c#,.net,hook,managed,easyhook,C#,.net,Hook,Managed,Easyhook,我正在寻找一种在运行时将方法代码注入(添加/替换)三维参与方管理的.NET程序集中的方法。我在VS2017中使用C#来实现这一点 我试过: PlayHooky()工作得很好,但它不支持原始的方法调用,对于我正在处理的项目,我需要一些经过良好测试且健壮的东西 Easyhook(),web上的示例演示了如何将托管代码注入非托管API,但如果is设计为将托管代码注入托管API,则找不到相关信息 Deviare v.2.0(),只是不起作用,即使遵循他们的快速入门指南,也没有关于目标托管程序集支持的信

我正在寻找一种在运行时将方法代码注入(添加/替换)三维参与方管理的.NET程序集中的方法。我在VS2017中使用C#来实现这一点

我试过:

  • PlayHooky()工作得很好,但它不支持原始的方法调用,对于我正在处理的项目,我需要一些经过良好测试且健壮的东西
  • Easyhook(),web上的示例演示了如何将托管代码注入非托管API,但如果is设计为将托管代码注入托管API,则找不到相关信息
  • Deviare v.2.0(),只是不起作用,即使遵循他们的快速入门指南,也没有关于目标托管程序集支持的信息
以下是对我不起作用的EasyHook代码:

TestClass r = new TestClass();
MethodInfo originalMethodInfo = typeof(TestClass).GetMethod(nameof(TestClass.DoSomething));
IntPtr originalMethodInfoPtr = originalMethodInfo.MethodHandle.GetFunctionPointer();

MethodInfo replacementMethodInfo = typeof(Program).GetMethod(nameof(Program.DoSomething));
IntPtr replacementMethodInfoPtr = replacementMethodInfo.MethodHandle.GetFunctionPointer();
//Create hook
using (LocalHook hook = EasyHook.LocalHook.CreateUnmanaged(originalMethodInfoPtr, replacementMethodInfoPtr, IntPtr.Zero))
{
    hook.ThreadACL.SetInclusiveACL(new int[1]);//Enable hook
    r.DoSomething();//Call original method, expecting replacement method to be called
    Console.ReadKey();
}
当我尝试使用
EasyHook.LocalHook.Create
时,我得到了
“托管调试助手‘重入’:‘尝试调用托管代码而不首先转换出去……”
异常

我正在寻找如何使EasyHook发挥作用的任何想法或一些替代方法,以实现动态管理挂钩。

我以前使用过并发现这是一个用于管理到管理注射的强大且易于使用的工具。我以前使用过并发现这是一个用于管理到管理注射的强大且易于使用的工具。