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);
Другие вопросы по тегам