给定一个汇编对象,我可以将其反汇编为文本吗
本文关键字:我可以 反汇编 文本 对象 汇编 一个 | 更新日期: 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)