我有一个byte[]
,其中包含表示程序集中方法的字节。例如,一个简单的mov eax,1
- retn
函数:
var method = new byte[] { 0xB8,0x01,0x00,0x00,0x00,0xC3 };
是否有可能在运行时创建一个方法,我可以使用字节数组在C#中调用它来创建它?
答案 0 :(得分:0)
是的,你可以使用Reflection Emit来完成。但是你应该编写逻辑来逐字节地读取这个字节数组,并将你需要的Emmit OpCodes读入ILGenerator。
这很简单。首先,您创建新的DynamicMethod,从中调用GetILGenerator,从GetILGenerator执行一系列“Emmit”调用,从DynamicMethod调用CreateDelegate,最后通过调用此委托来调用新方法。