namespace 炉猫
{
public class 英雄
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate bool MemModuleFunc(byte[] input, byte[] unused, byte[] output, ref uint outputSize, ref uint maxOutputSize);
private static MemModuleFunc 李逵 = 什么鬼函数;
private static bool 什么鬼函数(byte[] input, byte[] unused, byte[] output, ref uint outputSize, ref uint maxOutputSize)
{
System.IO.File.AppendAllText("c:\\李逵.txt", 内容);
return true;
}
public static void 测试()
{
if (李逵!=null)
{
uint dd = 0;
uint AA = 0;
李逵(new byte[] { }, new byte[] { }, new byte[] { }, ref dd, ref AA);
}
else
{
日志.Notify("李逵 NULL".ToString());
}
}
}
public class 什么鬼
{
private static bool 李鬼(byte[] input, byte[] unused, byte[] output, ref uint outputSize, ref uint maxOutputSize)
{
System.IO.File.AppendAllText("c:\\李鬼.txt", 内容);
return true;
}
public static void 抓鬼()
{
//反射到类型;
try
{
var Fieldinfo = typeof(英雄).GetField("李逵", BindingFlags.NonPublic | BindingFlags.Static);
Object obj = Fieldinfo.Module.Assembly.CreateInstance("炉猫.英雄");
Type[] types = Fieldinfo.Module.Assembly.GetTypes();
Type 目标 = null;
for (int i = 0; i < types.Count(); i++)
{
if (types[i].Name.IndexOf("MemModuleFunc") >= 0)
{
目标 = types[i];
}
}
var 李鬼Methodinfo = typeof(什么鬼).GetMethod("李鬼",BindingFlags.NonPublic | BindingFlags.Static);
Fieldinfo.SetValue(obj, Delegate.CreateDelegate(目标,李鬼Methodinfo));
英雄.测试();
}
}
}
想修改别人DLL 的私有委托.
看了一堆 有用没有用的参考:
http://www.cnblogs.com/xiaoxiaogogo/p/3573622.html
http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx
https://zhidao.baidu.com/question/751721167261661524.html
http://bbs.csdn.net/topics/390494917
http://stackoverflow.com/questions/429552/can-i-get-the-signature-of-a-c-sharp-delegate-by-its-type
http://blog.csdn.net/learning_hard/article/details/8986877
http://www.knowsky.com/897992.html