Dnlib - 从加载的程序集中执行 IL MethodBody
Dnlib - Execute IL MethodBody from loaded assembly
我正在为一个简单的 .Net 打包程序开发一个解包程序。
我想使用 dnlib 从加载的程序集中执行一个方法。
我不能使用System.Reflection因为加壳器打包原始可执行文件然后它会在执行前在内存中解压所以使用反射给我错误无法找到xxx模块。
目前我正在扫描加载的程序集并获取我需要执行解包的方法的 MethodDef。
如您所知,有一种方法可以使用 C# 从 dnlib 中加载的程序集执行 IL 代码?
想法是调用加壳方法以避免在每次加壳更新时重写解壳程序。
这种情况可能吗?或者这只是一个梦? XD
如果不可能,我的另一个想法是编写一个 IL 模拟器。
还有其他途径可以解决吗?
非常感谢您的宝贵时间。
您不需要 dnlib,只需使用这些方法调用程序集即可。此示例调用一个方法,该方法使用单个整数作为 returns 字符串的参数。
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);
我正在为一个简单的 .Net 打包程序开发一个解包程序。
我想使用 dnlib 从加载的程序集中执行一个方法。
我不能使用System.Reflection因为加壳器打包原始可执行文件然后它会在执行前在内存中解压所以使用反射给我错误无法找到xxx模块。
目前我正在扫描加载的程序集并获取我需要执行解包的方法的 MethodDef。
如您所知,有一种方法可以使用 C# 从 dnlib 中加载的程序集执行 IL 代码?
想法是调用加壳方法以避免在每次加壳更新时重写解壳程序。
这种情况可能吗?或者这只是一个梦? XD
如果不可能,我的另一个想法是编写一个 IL 模拟器。
还有其他途径可以解决吗?
非常感谢您的宝贵时间。
您不需要 dnlib,只需使用这些方法调用程序集即可。此示例调用一个方法,该方法使用单个整数作为 returns 字符串的参数。
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);