给定一个汇编对象,我可以将其反汇编为文本吗

本文关键字:我可以 反汇编 文本 对象 汇编 一个 | 更新日期: 2023-09-27 18:21:54

我在内存中只有对托管Assembly reference对象的引用,即没有dll或实际代码。整个问题是关于我有System.Reflection.Assembly.的内存表示这一事实

我希望能够将它分解为文本,或者至少获得元数据,比如说函数体。

这可能吗?

我试过物体的所有公共表面区域,但没有任何效果。

给定一个汇编对象,我可以将其反汇编为文本吗

我不知道有什么东西可以将整个内存中的程序集反汇编成文本。我不知道如何将内存中的程序集保存到磁盘上,以便使用基于文件的反汇编程序(如ildasm)。

但是,如果您只想知道方法使用了哪些常量字符串,那么您不需要所有这些。

要访问方法的IL(作为MethodInfo),可以使用method.GetMethodBody().GetILAsByteArray()。正如方法名称所暗示的,这会给您一个byte[],它不容易使用。但你可以使用Jb Evain的Mono.Reflection来为你做艰苦的工作(尽管有这个名字,但它与Mono并没有真正的关系,也可以在normal.Net中使用)。

剩下的唯一步骤是实现使用ldstr指令访问常量字符串,所以这就是我们需要寻找的。

知道了所有这些,找到一个方法使用的常量字符串就像一样简单

method.GetInstructions().Where(i => i.OpCode == OpCodes.Ldstr).Select(i => (string)i.Operand)
相关文章: