Dnlib - выполнить IL MethodBody из загруженной сборки
Я работаю над распаковщиком для простого упаковщика.Net.
Я хотел бы выполнить метод из загруженной сборки с помощью dnlib.
Я не могу использовать System.Reflection, потому что упаковщик упаковывает исходный исполняемый файл, а затем он распаковывается в памяти перед выполнением, поэтому использование отражения дает мне ошибку, так как я не могу найти модуль xxx.
В настоящее время я сканирую загруженную сборку и получаю MethodDef методов, которые мне нужны для распаковки.
Как вы знаете, есть способ выполнить код IL из загруженной сборки в dnlib, используя C#?
Идея состоит в том, чтобы вызывать методы упаковщиков, чтобы избежать перезаписи распаковщика при каждом обновлении упаковщика.
Возможен ли этот сценарий? Или это просто мечта? XD
Если это невозможно, другая идея, которая у меня есть, это написать эмулятор IL.
Есть другие пути для решения этой проблемы?
Большое спасибо за ваше время.
1 ответ
Вам не нужен dnlib, просто вызовите сборку, используя эти методы. В этом примере вызывается метод с единственным целым числом в качестве аргумента, который возвращает строку.
var assembly = Assembly.LoadFile(fullpathofexecutable);
BindingFlags eFlags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
Type classInstance = GetClass("Class196", assembly.GetTypes());
MethodInfo myMethod = classInstance.GetMethod("methodThatIWantToExecute", eFlags);
object[] arguments = {1,2,3 };
string result = (string)myMethod.Invoke(null, arguments);