我最近开始阅读开源加密程序的工作原理。
问题是,我被困在这两行代码中,我根本无法理解,我已经查看了MSDN,但它根本不能帮助我理解这两行代码。< / p>
MethodInfo run = Assembly.Load(InjRes).GetType("Resource.reflect").GetMethod("Run");
bool inj = (bool)run.Invoke(null, new object[] { Assembly.GetExecutingAssembly().Location, "", PayloadRes, false });
我也试图想出另一种方法来完成同样的事情,有没有办法调用.GetMethod?
答案 0 :(得分:0)
这是相当基本的&#34;反思&#34;在.NET中。
基本上这里发生的是:
InjRes
Resource.reflect
的类型定义(可能是class
)Resource.reflect
类型中,获取Run
方法并将其保存到变量run
Run()
实例上调用(在其他作品中,&#34;执行&#34;)null
函数(这意味着Run()
可能是static
方法)参数(Assembly.GetExecutingAssembly().Location, "", PayloadRes, false)
更简单地说,这些线条将转换为常规的旧C#&#34;看起来像是:
bool inj = Resource.reflect.Run(Assembly.GetExecutingAssembly().Location, "", PayloadRes, false);
但原作者可能无法在上面写上简单的1行,因为:
Resouce
命名空间,因此会抛出编译错误Resouce.reflect
类或Run
方法不是public
因此无法正常调用。反思可以绕过这个限制。