我如何调用.getmethodinfo?

时间:2016-01-15 21:20:50

标签: c#

我最近开始阅读开源加密程序的工作原理。

问题是,我被困在这两行代码中,我根本无法理解,我已经查看了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?

1 个答案:

答案 0 :(得分:0)

这是相当基本的&#34;反思&#34;在.NET中。

基本上这里发生的是:

  • InjRes
  • 所示加载.NET程序集
  • 在该程序集中,获取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因此无法正常调用。反思可以绕过这个限制。