我一直在用 C# 3.0 阅读 CLR,我一直在思考程序集、模块和标题,但是事情变得复杂了。这是我所理解的,但如果有人能进一步澄清一些事情,那就太好了:
模块是 csc.exe 的结果,其中包含 IL 代码和元数据表。元数据表包含三个不同的表,它们是:
- “ModuleDef、TypeDef、PropertyDef、MethodDef、EventDef、FieldDef”等定义表
- 参考表,例如“TypeRef、ModuleRef、MemberRef 等”。
- 清单表**
程序集是包含许多模块以及图像、文档、pdf 等资源的容器。
- PE 文件代表 Portable Executable 文件可以是 .EXE 或 .DLL。这些文件具有 PE32 或 PE32+ 标头、CLR 标头、元数据、IL 代码。
书上说组装是一个由模块组成的容器,它还说托管模块是
托管模块:
托管模块是需要 CLR 执行的标准 32 位 Microsoft Windows 可移植可执行 (PE32) 文件或标准 64 位 Windows 可移植可执行 (PE32+) 文件。
杰弗里里希特 (2010-02-05)。通过 C# 进行 CLR(Kindle 位置 696-697)。OReilly Media - A. Kindle 版。
装配的定义:
程序集是一个或多个模块或资源文件的逻辑分组。
杰弗里里希特 (2010-02-05)。通过 C# 的 CLR(Kindle 位置 766-767)。OReilly Media - A. Kindle 版。
因此,从同一本书中获取的图像中,托管模块实际上是程序集的一部分。
PE32 标头属于程序集,但作者也说它也属于托管模块等。
这里的分别是什么?为什么他使用可互换的模块和组件,即使它们看起来足够独立。
托管 PE 文件有四个主要部分:PE32(+) 标头、CLR 标头、元数据和 IL。PE32(+) 标头是 Windows 期望的标准信息。CLR 标头是一小块特定于需要 CLR(托管模块)的模块的信息。
杰弗里里希特 (2010-02-05)。CLR 通过 C#(Kindle 位置 1628-1629)。OReilly Media - A. Kindle 版。
图像也清楚地显示模块只有元数据而不是 PE32(+)、CLR 标头等。你认为清单和元数据可以互换使用吗?
您能否也解释一下模块中的 **Manifest 表?