CLR探索系列:托管PE/COFF文件格式侧窥

本文深入探讨.NET环境下托管PE/COFF文件格式,重点关注CLR头部、元数据和IL代码。通过一个C#代码示例,解释托管PE文件的组成,包括PE32+头部、CLR头部、元数据和IL。文章分析了IMAGE_COR20_HEADER结构,展示了CLR头部的实际内容,并用ildasm工具展示元数据统计信息,为后续的元数据内存结构分析做铺垫。
摘要由CSDN通过智能技术生成

一直都想写篇文章来说说那些尘封在PE/Coff文件格式下的那些事,还有Metadata和EEClass是如何表现了一个静态的PE格式文件在内存中的映射结构。
   在这篇文章里,我不去介绍windowsPE文件的具体格式,也不去介绍一个托管或者是非托管PE文件的加载运行方式,更加不去介绍一个PE文件里面的各个头部以及整体结构的各个部分的含义。

 

而是侧重于介绍,基于托管环境下,DotNet对基本的PE/CoFF文件格式做了那些扩充,CLR头部介绍,以及元数据和IL代码详析解析。主要侧重从静态文件的角度,来剖析DotNet下最基本的模块的结构,以及这样的结构如何适应一个托管的环境。

 

拟把PE文件格式里里外外从上到下一点一点的完全解剖一遍,当然,不可能做到很全面,不然,如果想知道PE文件的各个方面的具体的细节,可以参阅文章底部推荐的那个白皮书文档,这份文档相当详尽介绍了PE文件格式的点点滴滴。

 

首先,还是从一段C#代码开始:

class Program

    {

        public const int conField=122*1119;

        public readonly int roField;  

        private int _property;

        public int Property

        {

            get {return _property; }

            set{_property = value; }

        }  

        static void Main (string[] args)

        {

            (new Program()).Method();

        }  

        public void Method()

        {

            System.Console.ReadLine();

        }        
    }

之所以定义这么多类型和字段,主要是为了在解说托管PE文件格式的时候,元数据表中相关的表都会出现相关记录。

编译之后,得到一个叫做TestConsoleApp.exe的托管PE文件。在继续下面的叙述之间,首先先概括的说一下Metadata。不说IL语言是因为,在我以前的博文中,已经有相关的介绍。

一个托管PE文件,粗略的讲,由4个部分组成。PE32(+)的头部,CLR头部,Metadata以及IL

首先,我们来说说CLR的头部。这个东西,是托管的PE文件所特有的东西。

我们打开DotNet Framework里面的include文件夹里面一个叫做CorHdr.h的文件,找到一个叫做IMAGE_COR20_HEADER这个数据结构的定义。这个数据结构,定义的就是CLRheader里面内容。下面对其的定义:

 

// COM+ 2.0 header structure.</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值