一、各个语言的长处

①非托管C/C++可对系统进行低级控制。可完全按照自己的想法管理内存,必要时方便地创建线程
②使用Microsoft Visual Basic 6.0可以快速生成UI应用程序,并可以方便的控制COM对象和数据库
③公共语言运行时(CLR)是一个可以由多种编程语言使用的“运行时”。CLR的核心功能(内存管理、程序集加载、安全性、异常处理、线程同步)可由面向CLR的所有语言使用

二、什么是托管模块

托管模块是标准的32位Microsoft Windows可移植执行体(PE32)文件,或者是标准的64位Windows可移植执行体(PE32+)文件,它们都需要CLR才能执行
【PE:可移植执行体】

三、托管模块的各个组成部分

组成部分

说明

PE32或PE32+

①标准Windows PE文件头。这个头使用PE32或PE32+格式

②标识文件类型(GUI,CUI或者DLL),并包含文件的生成时间

对于只包含IL代码的模块,PE32(+)头的大多数信息会被忽视。如果包含(native)CPU代码的模块,这个头包含与本机CPU代码有关的信息

CLR

包含使这个模块成为托管的信息(可由CLR和一些实用程序进行解释)

①CLR版本(major(主)minor(次)版本号)

②一些标志(flag)

③托管模块入口方法(Main方法)的MethodDef元数据token

④元数据

⑤资源

⑥强名称

⑦一些标志及其他不太重要的数据项的位置/大小

元数据

每个托管模块都包含元数据表(两种表)

①描述源代码中定义的类型和成员

②描述代码引用的类型和成员

IL(中间语言)代码

编译器编译源代码时生成的代码。在运行时,CLR将IL编译成本机CPU指令

四、安全性

托管语言总是利用Windows的数据执行保护(Data Execution Prevention DEP)和地址空间布局随机化(Address Space Layout Randomization ASLR)来增强整个系统的安全性

五、什么是IL代码

IL代码有时称为托管代码,因为CLR管理它的执行

六、元数据

1,什么是元数据
①元数据是一些老技术的超集。这些老技术包括COM的“类型库”(Type Library)和“接口定义语言”(Interface Definition Language,IDL)文件
②元数据和类型库和IDL不同,元数据总是与包含IL代码的文件关联(元数据总是嵌入和代码相同的EXE/DLL文件中,并嵌入最终生成的托管模块,所以元数据和它描述的IL代码永远不会失去同步)

2,元数据的用途
①元数据避免了在编译时对原生C/C++头和库文件的需求,编译器直接从托管模块中读取元数据
②Microsoft Visual stidio“智能感知”技术会解析元数据,告诉你一个类型提供了那些方法、属性、事件和字段。对于方法,还能告诉你需要的参数
③CLR的代码验证过程使用元数据确保代码只执行“类型安全”的操作
④元数据允许将对象的字段序列化到内存块,将其发送到另一台机器,然后反序列化,在远程机器上重建对象状态
⑤元数据允许垃圾回收器跟踪对象的生存期。垃圾回收期能判断任何对象的类型,并从元数据知道那个对象中的哪些字段引用了其他对象

七、C++编译器

Microsoft C++编译器的灵活性是其他编译器无法比拟的,因为它允许开发人员在托管代码中使用原生的C/C++代码

八、什么是程序集

①一个或多个模块/资源文件的逻辑分组
②重用、安全性、版本控制的最小单元
③相当于组件
④将托管模块合并成程序集

九、MSCorEE.dll

当运行应用程序时,windows检查exe文件头,决定创建32位或者64位进程之后,会在进程地址空间加载MSCorEE.dll的x86,x64或ARM版本,然后进程的主线程调用MSCorEE.dll中定义的一个方法。这个方法初始化CLR,加载EXE程序集,在调用其入口方法(Main)。随即,托管应用程序启动并运行

CLR基础的更多相关文章

  1. 第一部分 CLR基础:第3章 共享程序集和强命名程序集

    第一部分 CLR基础:第3章 共享程序集和强命名程序集

  2. Windbg CLR基础小测 《第六篇》

    首先写一段代码如下: namespace ConsoleApplication3 { class Program { static void Main(string[] args) { Console ...

  3. 第一部分 CLR基础:第1章 CLR的执行模型

    1.1将源代码编译成托管模块

  4. 01.由浅入深学习.NET CLR 基础系列之CLR 的执行模型

    .Net 从代码生成到执行,这中间的一些列过程是一个有别于其他的新技术新概念,那么这是一个什么样的过程呢,有什么样的机制呢,清楚了这些基本的东西我们做.Net的东西方可心中有数.那么,CLR的执行模型 ...

  5. CLR基础之一---认识CLR [《CLR via C#》读书笔记]

    <CLR via C#>读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称.这 ...

  6. CLR基础与术语

    CLR(Common Language Runtime):一个可由多种编程语言使用的"运行时". CLR的核心功能(内存管理,程序集加载,安全性,异常处理,线程同步等)可由面向CL ...

  7. CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码

    CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集, ...

  8. 重温CLR(一)CLR基础

    如果一个C#developer,对CLR没有了解,那就只能是入门级别.未来.NET CORE是趋势,但是.NET CORE 也是基于CoreCLR的,而CLR和CoreCLR其实差别不大,从runti ...

  9. CLR - 基础

    前言 好记性不如烂“笔头”系列... 目录 托管模块 JIT(just-in-time) 元数据 CLR 解析类型引用 托管模块 面向 CLR 的编译器在编译源文件时最终会编译成一个 PE(可移植执行 ...

随机推荐

  1. 20145234黄斐《Java程序设计》第七周

    教材学习内容总结 第十二章部分 - Lambda 认识Lambda语法 Lambda去可以重复,符合DRY原则,而且Lambda表达式可读性更好,操作更简单 匿名类型最大的问题就在于其冗余的语法,la ...

  2. 【leetcode 简单】 第九十八题 第三大的数

    给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2 ...

  3. js 各类判断用户输入字符的格式函数

    1.JS 判断IP格式是否正确: function checkIP(ip) { var regular = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;//正则表达式 if (reg ...

  4. 南京邮电大学CTF密码学部分Writeup

    异性相吸 1.xor 2.hex2binary 3.len(bin(miwen))==len(bin(mingwen)) # -*- coding:utf-8 -*- file_de = open(' ...

  5. torch.normal(means, std, out=None)

    返回满足正态分布的张量 means和std分别给出均值和标准差

  6. xss的一个tip

    其实可能不能算tip吧. 分享一下吧. unicode有四种编码方式 源文本:The &#x [Hex]:The &# [Decimal]:The \U [Hex]:\U0054\U0 ...

  7. Session和Cookie,Django的自动登录机制

    什么是Cookie? Cookie是浏览器的本地存储机制,存储服务器返回的各种信息,下次发起请求时再发送给服务端,比如访问baidu 什么是Session? 刚才说道,Cookie存储服务端返回的信息 ...

  8. 栈应用之 背包问题(Python 版)

    栈应用之 背包问题 背包问题描述:一个背包里可以放入重量为weight的物品,现有n件物品的集合s,其中物品的重量为别为w0,w1,...,wn-1.问题是能否从中选出若干件物品,其重量之和正好等于w ...

  9. 洛谷P1841重要的城市

    传送门啦 重要城市有三个性质如下: 1.重要城市能对其他两个不同城市的最短路径做出贡献 2.重要城市具有唯一性,如果两不同城市之间的最短路径有两种中间城市情况,那么这两个中间城市可以彼此代替,就都不能 ...

  10. Struts – MappingDispatchAction Example

    Struts MappingDispatchAction class is used to group similar functionality into a single action class ...