2

我需要编写一个相对较小的程序来解析 .net 可执行文件并生成对外部方法的调用列表。例如,如果System.Console.WriteLine在文件中调用该工具应该打印在System.Console.WriteLine某处调用的。我不能(有限的大脑和时间)也不需要(我只需要一个调用列表)实现真正的反汇编。我想要一个grep 友好的 perl 友好的相对较短的解决方案,它写入调用的函数的名称和调用发生的偏移量。

我已经尝试过的事情:

  1. 从 MSDN 下载规范。现在我知道静态调用被翻译成0x28字节码。:) 后面是方法描述符,但理解方法描述符的含义可能需要阅读整个规范。

  2. 在 Reflector 中打开简单的 exe。Reflector 精确地复制了我的原始应用程序的代码,但我看不到调用的字节码。

是否可以用有限的时间和知识实现所需的有限功能?

如果是这样,我知道如何实施它?是否有任何“CIL 傻瓜组装”指南?

4

3 回答 3

4

Cecil项目是一个库,可以完全按照您的意愿行事。

于 2009-10-15T20:32:40.673 回答
2

如果您想要对 grep/perl 友好的东西,请使用 ildasm(在其命令行模式下,即使用 /out 或 /text)将字节码反汇编为文本 IL。然后,您可以使用 grep、perl 或您选择的语言来查找调用说明。(grep 可能不足以识别调用指令所在的方法,但 perl 应该能够。)

于 2009-10-15T20:39:24.763 回答
1

Common Compiler Infrastructure 也可能对您有所帮助:http ://ccimetadata.codeplex.com/ 。

我会同意 itowlson 的建议,将程序集反汇编成一个 .il 文件并使用 grep 解析它,如果这是您正在寻找的。由于 ILDasm 将为所有类型显示完整的命名空间,因此您应该能够很快地弄清楚它是您的类型还是引用的类型。

于 2009-10-16T00:10:17.727 回答