从DLL二进制文件获取IL代码

时间:2009-08-25 15:05:11

标签: disassembly il

我正在研究IL。

我喜欢RedGate的.Net Reflector工具(最初是Lutz)。我已经有Serge Lidin和Ecma-335书籍。看起来这些东西都是我们必须使用IL(当然除了ILAsm和ILDasm)。

我的任务是解析汇编二进制文件并获取IL代码。很明显,程序集是一个二进制文件;因此,它只是一个字节链。要做我想做的事情,我需要知道汇编结构:存在哪些头,它们占用多少字节,以字节为单位的偏移量,以字节为单位读取它等等。

Lidin的书描述了它,但对我来说并非100%清楚。有没有人试图将DLL解析为字节流?要将元数据和IL代码作为字节流,然后解析IL字节流以获取IL源?我不想在这里使用反思;我想只使用二进制文件。

单声道塞西尔是否也这样做?即便如此,我也想知道该怎么做。

是的,我正在尝试创建另一个类似.NET Reflector的轮子,我想知道它是如何制作的。就像有人说:“Lutz不一定是世界上唯一知道如何制作它的人。”

顺便说一句,ISDasm如何运作?它是用.net编码的吗?

任何想法,资源,例子?

谢谢。

2 个答案:

答案 0 :(得分:3)

Mono.Cecil正是您想要做的。所以,您可能需要查看源代码。

事实上,有一个名为Cecil.Decompiler的项目,来自Jb Evain,基于Cecil,它是一个开源的.NET反编译器。

答案 1 :(得分:0)

您可以直接使用ildasm

ildasm.exe MyFile.dll /output:MyFile.il

它可以在您的程序中自动完成。