Tar*_*rik 9 .net c# clr assemblies
我一直在阅读使用C#3.0的CLR,我一直在思考Assemblies,Modules和Headers,但事情变得复杂了.这就是我所理解的,但如果有人能够澄清一些事情,那将会很棒:
模块是包含IL代码和元数据表的csc.exe的结果.元数据表包含三个不同的表:
程序集是包含许多模块以及图像,文档,pdf等资源的容器.
书中说大会是一个由模块组成的容器,它也说管理模块是
管理模块:
托管模块是标准的32位Microsoft Windows可移植可执行文件(PE32)文件或标准的64位Windows可移植可执行文件(PE32 +)文件,需要CLR才能执行.
里希特,杰弗里(2010-02-05).CLR通过C#(Kindle Locations 696-697).OReilly Media - A. Kindle版.
大会的定义:
程序集是一个或多个模块或资源文件的逻辑分组.
里希特,杰弗里(2010-02-05).CLR通过C#(Kindle Locations 766-767).OReilly Media - A. Kindle版.

因此,管理模块似乎实际上是从同一本书中拍摄的图像中的大会的一部分.
PE32标题属于Assemblies,但是作者也说它也属于Managed Modules,等等.
这里的分离是什么?他为什么使用模块和组件可以互换,即使它们看起来足够独立.
托管PE文件有四个主要部分:PE32(+)头,CLR头,元数据和IL.PE32(+)标头是Windows期望的标准信息.CLR头是一小块信息,特定于需要CLR(托管模块)的模块.
里希特,杰弗里(2010-02-05).CLR通过C#(Kindle Locations 1628-1629).OReilly Media - A. Kindle版.
此外,图像清楚地显示模块只有元数据而不是PE32(+),CLR标题等.您认为Manifest和Metadata可以互换使用吗?
还有,请你解释一下模块中的清单表吗?
你发布的内容有点不确定托管程序集是如何嵌入到PE32文件中的.它是一种非常灵活的格式,最初用于存储本机可执行代码和资源,但足够灵活,可以存储数据.从Windows的角度来看,这就是组件的真正含义.只有CLR才能将数据转换为可执行的数据.
PE32文件不仅包含程序集.其中也有本机代码.纯托管程序集的5个字节.它有一个mscoree.dll的跳转指令,mscoree.dll是托管代码的引导程序.EXE包含跳转到_CorExeMain,DLL包含跳转到_CorDllMain.这进一步扩展了混合模式程序集,System.Data.dll和PresentationCore.dll就是这些例子.它们中包含大量本机代码,代码由托管类包装.C++/CLI编译器和链接器是创建这样的程序集的方法..text部分包含代码,.reloc部分包含重定位信息,可帮助DLL加载到内存中的任意地址.
大多数PE32文件还包含非托管资源.Windows理解的格式.那存储在.rsrc部分.例如,C#编译器会自动在那里创建资源,您可以使用/ win32res选项覆盖这些资源.您可以使用File + Open + File查看此内容并选择一个程序集.有三个重要的:
Dumpbin.exe是一个查看PE32文件内部的工具.不幸的是,它知道托管程序集,所以你看不到一切.
| 归档时间: |
|
| 查看次数: |
2798 次 |
| 最近记录: |