我需要编写一个相对较小的程序来解析.net可执行文件并生成对外部方法的调用列表。例如,如果在文件中调用System.Console.WriteLine
,则工具应该打印出某个地方调用System.Console.WriteLine
。我不能(有限的大脑和时间)和不需要(我只需要一个调用列表)实现真正的反汇编。我想要一个 grep friendly perl friendly 相对较短的解决方案,它会写出所调用函数的名称和调用发生的偏移量。
我已经尝试过的事情:
从MSDN下载规范。
现在我知道静态调用在字节码中被转换为0x28
。 :)接下来是方法描述符,但是理解方法描述符的含义可能需要阅读整个规范。
在Reflector中打开简单的exe。 反射器精确地复制了我原始应用程序的代码,但我看不到调用的字节码。
是否有可能在有限的时间和知识下实现所需的有限功能?
如果是这样,我知道如何实施它?有没有“CIL汇编傻瓜”指南?
答案 0 :(得分:4)
Ceci l项目是一个完全按照你想要做的库。
答案 1 :(得分:2)
如果你想要一些grep / perl-friendly,请使用ildasm(在命令行模式下,即带/ out或/ text)将字节代码反汇编为文本IL。然后,您可以使用grep,perl或您选择的语言来查找呼叫说明。 (grep可能不足以确定调用指令所在的方法,但perl应该能够。)
答案 2 :(得分:1)
Common Compiler Infrastructure也可以为您提供帮助:http://ccimetadata.codeplex.com/。
我会支持itowlson建议将程序集反汇编成.il文件并使用grep解析它,如果这是你正在寻找的。由于ILDasm将显示所有类型的完整命名空间,因此如果它是您的类型或引用类型,您应该能够快速找出它。