Dnlib - 从加载的程序集中执行IL MethodBody

时间:2016-03-07 12:52:43

标签: c# reflection dnlib

我正在为一个简单的.Net打包器打开一个解包器。

我想使用dnlib从加载的程序集中执行方法。

我无法使用System.Reflection,因为打包程序打包原始可执行文件,然后在执行之前它会在内存中解压缩,因此使用反射会给我错误,无法找到xxx模块。

目前我扫描加载的程序集并获取我需要执行解包的方法的MethodDef。

如您所知,有一种方法可以使用C#从dnlib中的已加载程序集执行IL代码?

我们的想法是调用打包程序方法,以避免在每次打包程序更新时重写解包程序。

这种情况可能吗?或者它只是一个梦想? XD

如果不可能,我的其他想法是编写IL模拟器。

还有其他途径可以解决这个问题吗?

非常感谢你的时间。

1 个答案:

答案 0 :(得分:0)

您不需要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);