У меня есть byte[]
который содержит байты, представляющие метод в сборке. Например, простая функция mov eax,1
- retn
:
var method = new byte[] { 0xB8,0x01,0x00,0x00,0x00,0xC3 };
Возможно ли создать во время выполнения метод, который я могу вызвать на С#, используя массив байтов, чтобы создать его?
Да, вы можете сделать это, используя Reflection Emit. Но вы должны написать логику, которая будет читать этот байтовый массив byte by byte и Emmit OpCodes, который вам нужен в ILGenerator.
Это очень просто. Сначала вы создаете новый DynamicMethod, вызываете из него GetILGenerator, делаете серию вызовов "Emmit" из GetILGenerator, вызываете CreateDelegate из DynamicMethod и, наконец, вызываете новый метод, вызывая этот делегат.
return true;
, в этом случае.