第一章 CLR的执行模型

概念篇

  • CLR(Common Language Runtime)【公共语言运行时】

可由多种编程语言使用的运行环境,提供内存管理、程序集加载、安全性、异常处理和线程同步等支持。

  • CTS(Common Type System)【通用类型系统

规范化的类型定义和管理,比如:字段、方法等, 又比如继承等特性。

  • CLS(Common Language Specification)【公共语言规范】

针对CLR/CTS定义的最基本的组建。

  • Manuged Module【托管模块】

标准的32位Mircorsofte Windows 可移植执行提(PE32)文件、或者是标准的64位Windows 可移植执行体(PE32+)文件。

  • Managed Code【托管代码】【中间代码(IL)】

编译器编译源代码是生成的代码

  • Assembly【程序集】

一个或多个模块、资源文件的逻辑性分组

CLR执行模型

程序的编译过程

image

说明:

  1. 步骤1:C#编译器将C#源文件编译为托管模块
  2. 步骤2:将生成的托管模块编译为程序集

CLR是针对程序集进行工作。

在细说托管模块和程序集的构成

  1. 托管模块

PE32或PE32+

标准的windows PE文件头

标识了文件类型,包括GUI、CUI、或者DLL,并包含一个时间标记来指出文件的生成时间

CLR头

包含使这个模块成为托管代码的信息,头中包含CLR版本、一些标识,托管模块入口方法(main)的MethodDef元数据token以及模块的元数据、资源、强名称,一些标识及其他不太重要的数据项的位置和大小。

元数据

主要是两种表:一种表述源代码中定义的类型和成员;一种描述源代码中引用的类型和成员。

IL代码

编译器将源代码生成的中间代码。

2、程序集

编译器根据PE32的清单文件,该清单文件中包含构成程序集的文件,程序集中的文件所实现的公开导出的类型以及程序及关联的资源和数据文件。编译器默认将生成的托管模块转为程序集。

主要使用的工具包含:CSC.exe(C#编译器)、AL.exe(程序集链接器)。

image

参考文档:

1、PE结构详解:http://blog.csdn.net/reversalc/article/details/8022977

2、CSC.exe的命令行使用:http://blog.csdn.net/reversalc/article/details/8022977

3、CLR完全介绍:http://www.cnblogs.com/emanlee/archive/2008/10/16/1312984.html

4、CLR简单介绍(包含执行过程):http://www.cnblogs.com/lufangtao/archive/2012/06/07/2539915.html

原文地址:https://www.cnblogs.com/xiuyuanjing/p/4826625.html