我正在为一个简单的.Net打包器打开一个解包器。
我想使用dnlib从加载的程序集中执行方法。
我无法使用System.Reflection,因为打包程序打包原始可执行文件,然后在执行之前它会在内存中解压缩,因此使用反射会给我错误,无法找到xxx模块。
目前我扫描加载的程序集并获取我需要执行解包的方法的MethodDef。
如您所知,有一种方法可以使用C#从dnlib中的已加载程序集执行IL代码?
我们的想法是调用打包程序方法,以避免在每次打包程序更新时重写解包程序。
这种情况可能吗?或者它只是一个梦想? XD
如果不可能,我的其他想法是编写IL模拟器。
还有其他途径可以解决这个问题吗?
非常感谢你的时间。
答案 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);