3

我正在开发一个从 .NET 程序集中预编译字节码的程序。这个程序本身就是一个 .NET 程序——到目前为止,我已经能够使用反射来提取所有需要的信息,包括字节码本身。但是,我在实现ldfld.

ldfld和类似的指令在其编码中具有引用FieldRefFieldDef的元数据标记。我知道这些是嵌入在程序集的 PE 文件中的元数据表中的元素。在最坏的情况下,我确实从 ECMA-335 获得了足够的信息来打开 PE 文件并自己查看所有这些信息,但这需要大量工作并且与我通过反射获得的其他信息不一致,所以我更喜欢通过反射进行此查找。

但是,我似乎找不到任何System.Reflection.Assembly查找元数据令牌的方法。(我可能刚刚错过了它。)我无法查找比程序集更具体的任何内容,因为我只知道引用程序集,直到我看到元数据(catch-22)。事实上,正如评论中所述,在检查元数据之前,我什至不知道该字段是在哪个程序集中定义的。

有没有办法通过反射查找此类元数据令牌?

4

1 回答 1

4

您没有在 上找到任何内容Assembly,因为 FieldDef 和 FieldRef 不属于程序集,它们属于一个模块(大多数程序集只有一个模块,但它们可以有更多)。并且Module有你想要的方法:ResolveField(). 你会像这样使用它:

Module module = …;
int fieldToken = …;
FieldInfo field = module.ResolveField(fieldToken);
于 2013-08-16T11:32:48.457 回答