【问题标题】:Dnlib - Execute IL MethodBody from loaded assemblyDnlib - 从加载的程序集中执行 IL MethodBody
【发布时间】:2016-06-21 00:48:54
【问题描述】:

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

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

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

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

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

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

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

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

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

非常感谢您的宝贵时间。

【问题讨论】:

    标签: c# reflection dnlib


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多