.net clr /core (x86/x64 instruction set platform) managed function inline interceptor (hooking)
1、OS:
1.1 >= Linux(:centos-7)
1.1 >= Windows-XP
2、CPU: Must support IA32/IA64 instruction-set
3、RT:
3.1 >= .NET Core 2.0
3.2 >= .NET Framework 2.0
1、Install
var interceptor = new Interceptor(typeof(Samples).GetMethod("A"), typeof(Samples).GetMethod("B"));
2、Suspend
interceptor.Suspend();
2、Resume
interceptor.Resume();
class Samples
{
public static int A(int x, int y)
{
Console.WriteLine($"Program.A({x}, {y})");
return x + y;
}
public static int B(int x, int y)
{
Console.WriteLine($"Program.B({x}, {y})");
return x + y;
}
public class Foo
{
public void A()
{
Console.WriteLine("Foo.A");
}
public void B()
{
Console.WriteLine("Foo.B");
}
public void G(int x)
{
Console.WriteLine($"Foo.G{x}");
}
};
public static void G(Foo foo, int x)
{
Console.WriteLine($"Program.Foo.G({x})");
}
static void Main(string[] args)
{
Interceptor[] interceptor = new[]
{
new Interceptor(typeof(Samples).GetMethod("A"), typeof(Samples).GetMethod("B")),
new Interceptor(typeof(Foo).GetMethod("A"), typeof(Foo).GetMethod("B")),
new Interceptor(typeof(Foo).GetMethod("G"), typeof(Samples).GetMethod("G")),
};
A(1, 2);
Foo foo = new Foo();
foo.A();
foo.G(3);
interceptor[2].Invoke(() => foo.G(3));
Console.ReadKey(false);
}
}