Добрый день.
Исходные данные: имеется MethodInfo виртуального метода, например полученный с интерфейса
Задача: необходимо собрать функцию которая осуществляет вызов виртуальных методов с такой же сигнатурой с помощью инструкции calli
Собственно вопрос: каким образом можно заменить инструкцию ldvirtftn в IL, либо как получить указатель на метод, который реализует поиск виртуальной функции и осуществит вызов?
Например в случае если метод невиртуальный и адрес метода, например, передан первым аргументом:
ldftn calli <br/>
можно заменить на<br/>
<code>ldarg.0<br/>
conv.i<br/>
calli <br/>
В данном случае адрес метода получается следующим образом: <br/>
<code>MethodInfo m;<br/>
var ptr = m.MethodHandle.GetFunctionPointer()</code></code>