2

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

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

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

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

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

这个想法是调用打包器方法以避免在每次打包器更新时重写解包器。

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

如果不可能,我的另一个想法是编写一个 IL 模拟器。

还有其他方法可以解决这个问题吗?

非常感谢您的时间。

4

1 回答 1

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);
于 2016-07-23T05:21:03.030 回答