从字节数组创建方法

时间:2014-08-26 02:44:23

标签: c# assembly

我有一个byte[],其中包含表示程序集中方法的字节。例如,一个简单的mov eax,1 - retn函数:

var method = new byte[] { 0xB8,0x01,0x00,0x00,0x00,0xC3 };

是否有可能在运行时创建一个方法,我可以使用字节数组在C#中调用它来创建它?

1 个答案:

答案 0 :(得分:0)

是的,你可以使用Reflection Emit来完成。但是你应该编写逻辑来逐字节地读取这个字节数组,并将你需要的Emmit OpCodes读入ILGenerator。

这很简单。首先,您创建新的DynamicMethod,从中调用GetILGenerator,从GetILGenerator执行一系列“Emmit”调用,从DynamicMethod调用CreateDelegate,最后通过调用此委托来调用新方法。