`
xiechangming
  • 浏览: 26627 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

.Net应用程序的运行过程

阅读更多

当运行一个.NET应用程序时,OS会先建立一个进程,检查PE文件,执行PE文件中的.text段中的code, 在托管程序编译时,.text段里面增加了一条JMP_CorExeMainJMP_CorDllMain指令(根据是exe文件还是dll文件不同)。若是非托管程序,就进入到入口函数了,若是托管程序就会跳入到另一个函数中。这个函数在一个叫做MSCorEE.dll的动态链接库文件中,当安装了.net框架时就会被复制在系统目录下。系统会根据托管程序PE文件中的信息找到这个DLL,然后通过MSCorEE.dllPE文件信息找到这个_CorExeMain函数的入口地址,然后修改刚才的JMP指令要跳转的地址,从而将控制跳转到了_CorExeMain这个函数里面去。然后,在这个函数里面,CLR被启动了,并做了若干的初始化工作,在加载CLR时会创建一个默认的AppDomain,它是CLR的运行单元,程序的Main方法就是在这里执行,这个默认的AppDomain是唯一且不能被卸载的,当该进程消灭时,默认AppDomain才会随之消失。加载后,再通过托管程序的CLR表头找到托管程序的入口地址,并将控制跳转到这里,于是托管程序开始运行。

托管程序编译的结果是IL中间代码,且IL代码是由CLR实施编译的。实际上,IL中的方法并不是每次被调用时都会被JIT Complier重新编译一次,而是采用“LazyLoad”,只有在第一次被调用的时候才会被编译。即时编译器保存有一个映射表。当调用一个方法时,即时编译器如果发现在这个映射表中没有标记这个方法,就会将这个方法的IL代码编译成CPU指令,然后分配在一个内存空间上,然后在这个映射表中记录下这个方法名和方法入口对应的内存地址,然后通过JMP指令跳转到函数中去。当下次再产生对这个方法的调用时,即时编译器因为已经知道了这个方法对应的内存地址,因此就会直接通过JMP指令跳转,而不会再次编译这段代码。

0
0
分享到:
评论

相关推荐

    我的第一个.NET应用程序

    标题 "我的第一个.NET应用程序" 涉及到的是在.NET框架下开发应用程序的基本步骤和概念。这通常是指使用Microsoft的Visual Studio IDE或者其他的.NET开发工具,创建一个简单的控制台应用程序,以此来熟悉.NET编程环境...

    vb.net关闭应用程序的代码

    以下是一个简单的关闭当前VB.NET应用程序的代码片段: ```vbnet Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click Application.Exit() End Sub ``` 在上面的例子中,当点击名...

    .net应用程序域、程序集、元数据、反射

    您必须首先将一个程序集加载到应用程序域中,然后才能运行该应用程序。运行普通的应用程序会导致将几个程序集加载到一个应用程序域中。默认情况下,公共语言运行库将一个程序集加载到包含引用该程序集的代码的应用...

    ASP.NET应用程序开发实用教程程序清单

    11. **部署**:ASP.NET应用程序可以通过各种方式部署,如FTP、Web Deploy等,确保应用程序在目标服务器上正确运行。 在程序清单中,你可能找到以下内容: 1. 示例代码:展示如何创建和使用ASP.NET控件,以及如何...

    构建ASP.NET应用程序

    ASP.NET应用程序可以使用C#、VB.NET或其他.NET语言编写,它们运行在ASP.NET运行时上,提供了丰富的功能,包括身份验证、授权、状态管理、错误处理等。 3. **Web 应用程序安全性**:在构建ASP.NET应用程序时,确保...

    .NET应用程序安装包制作

    ### .NET应用程序安装包制作详解 #### 一、概述 在.NET框架中开发的应用程序,为了便于用户安装和使用,通常需要将程序打包成安装包。本文将详细介绍如何使用Visual Studio来创建一个.NET应用程序的安装包。通过这...

    .NET Framework 4.8 运行库

    .NET Framework 4.8 运行库是微软开发的一个关键组件,它为Windows应用程序提供运行环境,支持多种编程语言,如C#、VB.NET、F#等。此运行库包含了.NET Framework的所有必需组件,包括公共语言运行时(Common ...

    Win7运行.net6开发的应用程序所需安装的环境

    在Windows 7操作系统环境下运行基于.NET 6框架开发的应用程序,需要确保系统具备相应的支持环境。Windows 7作为一款较为老旧的操作系统,虽然在当时具有广泛的用户基础,但随着技术的发展,新的软件开发框架,如.NET...

    借助 Azure 云和 Windows 容器让现有.NET 应用程序实现现代化革新

    本指南主要侧重于“平移”场景,最初主要考虑对基于 ... 本指南将介绍如何将基于.NET Framework 的现有服务器端应用程序的不同方面进行现代化 改造,随后直接迁入云端运行,但并不重构整个应用程序或更改其代码。

    .NET3.5程序运行环境.zip

    Windows XP是一款较旧的操作系统,而.NET Framework 3.5与之兼容,确保了在旧版系统上也能运行现代的.NET应用程序。 .NET Framework 3.5的主要特点和组件包括: 1. **公共语言运行库 (CLR)**:执行.NET应用程序的...

    调试和跟踪ASP.NET应用程序--vs2003

    在Visual Studio .NET 2003(简称VS2003)中,调试和跟踪ASP.NET应用程序是开发过程中至关重要的步骤,能够帮助开发者找出并修复代码中的错误,优化性能,以及理解程序的运行流程。 首先,让我们了解一下调试的基本...

    HealthCheck .net 应用程序

    日志记录则有助于调试和故障排查,记录下程序运行过程中的关键信息。 总结来说,"HealthCheck .NET应用程序"展示了如何利用.NET框架和多层架构设计出高效且可维护的系统监控应用。其背后蕴含的单例模式、三层架构、...

    .NET应用程序C#安全

    .NET应用程序的安全性是开发过程中至关重要的一环,C#作为.NET框架的主要编程语言,其安全机制设计是为了保护系统资源免受恶意代码的攻击。本文将详细探讨.NET中的代码访问安全(Code Access Security,简称CAS),...

    通过飞信.net虚拟机脱离.net框架运行.net程序

    这种方法对于那些希望在不支持.NET Framework的操作系统或者设备上运行.NET应用程序的用户非常有用。 总的来说,这个技术涉及到的知识点包括: 1. .NET Framework的结构和工作原理,它是如何提供运行.NET程序的环境...

    asp.net 网站独立运行器

    ASP.NET 网站独立运行器,如"秋色园"发布的版本,是一种轻量级的应用程序,它允许开发者在不依赖完整IIS(Internet Information Services)的情况下运行ASP.NET应用程序。这种工具对于开发、测试以及在没有安装完整...

    ASP.NET 应用程序生命周期

    首先,当用户通过浏览器向Web服务器请求一个ASP.NET应用程序的资源时,生命周期开始。ASP.NET作为Web服务器下的ISAPI扩展,负责处理映射到它(如.aspx、.ascx等)的文件扩展名的请求。如果文件扩展名未映射到ASP.NET...

    不用.netframework运行.net程序 源码示例

    2. **.NET Framework**:这是微软开发的用于构建和运行.NET应用程序的基础结构,包括了公共语言运行库(CLR)、基础类库和其他服务。 3. **运行**:这里是指执行.NET程序的过程,通常需要.NET Framework的支持,但...

    Microsoft.NET框架程序设计(修订版)

    Microsoft.NET框架程序设计》(修订版)是《微软.NET程序员系列》丛书之一,主要介绍如何开发面向Microsoft.NET框架的各种应用程序。Microsoft.NET框架是微软公司推出的新平台,包含通用语言运行时(CLR)和.NET框架...

    Microsoft .NET Framework 4.0运行库

    这个运行库是与Visual Studio 2012紧密配合的一个组件,主要服务于.NET应用程序的执行。本文将深入探讨.NET Framework 4.0的关键特性、功能以及它在开发过程中的作用。 .NET Framework 4.0是.NET Framework系列的一...

Global site tag (gtag.js) - Google Analytics