windows程序生成目标平台与CLR运行执行过程
C# 编译器提供一个选项, 该选项允许指定最终生成的程序集只能运行在32位windows版本的X86机器上使用, 只能在运行64位windows的X64机器上使用, 或者只能在32为windows RT的ARM机器上使用。
PS: 不指定具体平台的话, 默认选项就是anycpu, 该选项指定程序集能在任何版本的windows上运行。

由于生成版本选项, C#编译器生成的程序既包含的要么是PE32头, 要么是PE32+头。

除此之外, 编译器还会在头中指定CPU架构(默认是anycpu 代表任意CPU架构)。
Microsoft发布的SDK命令行实用程序 DumpBin.exe 和CorFlags.exe, 可用它们检查编译器生成的托管模块所嵌入的信息。
Windows应用程序运行过程?
1.可执行文件运行时, Windows检查文件头, 判断需要是32位还是64位的地址空间。
PE32文件在32位或者64位地址空间均可运行,
PE32+文件则需要64位地址空间。
PS: windows还会检查头中嵌入的CPU架构信息, 确保当前计算机的CPU符合要求。
2.Windows检查EXE文件头, 决定是创建32位还是64位进程之后, 会在进程地址空间加载MSCorEE.dll的x86,x64或ARM版本
如果是Windows的X86或ARM版本, MSCorEE.dll的X86版本在 %SystemRoot%\System32目录中。
如果是Windws的X64版本,MSCorEE.dll的X86版本在 %SystemRoot%\SysWow64 目录中。
64位版本则在 %SystemRoot%\System32目录中(为了向后兼容).
3.
然后进程的主线程调用MSCorEE.dll中定义的一个方法, 这个方法初始化CLR, 加载exe程序集,
再调用其入口方法(Main), 随即, 托管应用程序启动并且运行。
注: Environment的 Is64BitOperatingSystem 属性, 可判断是否在64位windows运行, Is64BitProcess属性可判断是否在64位地址空间运行。
windows程序生成目标平台与CLR运行执行过程的更多相关文章
- CLRMonitor - 跟踪CLR内部执行过程工具
CLRMonitor v1.0.1511.13 点击此处下载 软件介绍:这款软件主要用于跟踪CLR内部执行过程,定位当前程序执行的命名空间以及方法名等信息.可以迅速找到被跟踪程序的当前执行方法名.本软 ...
- yarn平台的任务调度和执行过程
- .NET CLR 运行原理
原文: Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects 文章讨论了: SystemDoma ...
- 四、Struts2的执行过程和原理
执行过程和原理(可能面试题) 学习目标:熟知struts2的执行过程(下图记住).源码可以不看 a.过滤器的初始化 .StrutsPrepareAndExecuteFilter是一个过滤器,过滤器就有 ...
- [转]C#程序无法在64位系统上运行之.NET编译的目标平台
今天将编译的C#的exe拷贝到测试机上(Win7_64bit),一运行就挂了,提示“stop working”,一开始怀疑测试机上没有安装.net framework框架,追究半天原来是编译的目标平台 ...
- Android系统移植(一)-让android系统在目标平台上运行起来
编号),文件系统采用ubifs格式,控制台设备为ttyS1,波特率为115200 启动的第一个应用程序是/init (6)确保控制台的设置和硬件保持一致,如:硬件上串口用的是UART1,则内核启动参数 ...
- Windows 10 IoT Serials 8 – 如何改变UWP应用的目标平台
Windows Insider计划直接加速了Windows系统的迭代,缩短了系统发布的周期.就Windows 10 IoT Core而言,迭代的速度和Windows 10 for PC.Windows ...
- .NET编译的目标平台(AnyCPU,x86,x64)
转载:http://blog.sina.com.cn/s/blog_78b94aa301014i8r.html 今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有D ...
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
转载:http://blog.sina.com.cn/s/blog_78b94aa301014i8r.html 今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有D ...
随机推荐
- 初识activiti
Activity工作流学习要点 1. 1个插件 在Eclipse中安装Activity插件,让你可以在Eclipse中绘制Activity工作流图 2. 1个引擎 ProcessEngine对象,Ac ...
- 网站及监控利器 Pandora FMS使用体验
Pandora FMS 是一个 开源的应用程序 ,用来监测网站的各种活动,它可以收到实时的监测报告,并发送到你指定的邮箱,也可以通过e-mail, SMS 发送. 650) this.width=65 ...
- SQLServer2008端口及防火墙设置
一,Microsoft SQL Server 2008R2数据库设置 1. 开始=>程序=>Microsoft SQL Server 2008R2=>配置工具=>S ...
- 关于props default 数组/对象的默认值应当由一个工厂函数返回
export default {props: { xAxisData: { type: Array, default: [] }, },这是我的代码 报错是Invalid default va ...
- oracle基础入门(一)
一:Oracle的安装 我所知的Oracle的数据库有 10g,11g, 12g, 我们常用的是10g ,因为10g有scott的用户,而11和12现在还没有(哪位大神看到有问题可以指出哦), ...
- hzwer 模拟题 祖孙询问
祖孙询问 题目描述 已知一棵n个节点的有根树.有m个询问.每个询问给出了一对节点的编号x和y,询问x与y的祖孙关系. 输入输出格式 输入格式: 输入第一行包括一个整数n表示节点个数. 接下来n行每行一 ...
- 深入理解javascript之高级定时器
setTimeout()和setInterval()能够用来创建定时器.其主要的用法这里就不再做介绍了.这里主要介绍一下javascript的代码队列. 在javascript中没有不论什么代码是马上 ...
- 读书笔记-深入理解JVM虚拟机-1.OOM初探
Java堆OOM(Out-Of-Memory)异常 执行例如以下程序,爆出异常 java.lang.OutOfMemoryError: Java heap space /** * VM Args:-X ...
- JavaLearning:日期操作类
package org.fun.classdemo; import java.util.Calendar; import java.util.GregorianCalendar; public cla ...
- HTML5:标记文字
文本层面的元素(简称文本元素).把这些元素加入文本其中,也就引入了结构和含义. HTML5规范明白指出:使用元素应该全然从元素的语义出发.但这类元素中有些元素的含义很明白,有些则比較含糊. 在元素的使 ...