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 ...
随机推荐
- BZOJ3158: 千钧一发
[传送门:BZOJ3158] 简要题意: 给出n个机器,每个机器有a[i]基础值和b[i]价值 选出一部分机器使得这些机器里面两两至少满足以下两种条件之一: 1.a[i]2+a[j]2!=T2(T为正 ...
- hdoj--1342--Lotto(dfs)
Lotto Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- JAVA 解析复杂的json字符串
转自:https://blog.csdn.net/lovelovelovelovelo/article/details/73614473String parameter = { success : 0 ...
- POJ 3184 DP+剪枝
思路: 先找到每i头奶牛能在的位置 (一段区间) 记为L[i]和R[i] f[j]表示在位置j取到的最小值 每回在范围内更新一哈 //By SiriusRen #include <cstdio& ...
- LINQ的基本语法包含如下的8个上下文关键字,这些关键字和具体的说明如下
出于工作需要,准备把LINQ的相关知识梳理一遍,希望能填补下之前学习漏掉的或是没有注意的地方,也为未来减轻压力~ LINQ查询表达式的基本语法很容易掌握,它使用C#常见的语言构造,从外观上看,和我们常 ...
- 如何更改AD域安全策略-密码必须符合复杂性要求
通常我们在域系统-管理工具上面是找不到“域安全策略”的,我们只能找到“本地安全策略”,而更改“本地安全策略”是不会对域产生任何的作用的.下面这个步骤教你如何找到“域安全策略” 1.Start(开始)– ...
- 【例题 7-11 UVA - 12325】Zombie's Treasure Chest
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 1.N/s1 < 1e6 枚举1的个数 2.N/s2<1e6 枚举2的个数 3.s1和s2的值较小 假设买了s2个1和s ...
- [Python] Reuse Code in Multiple Projects with Python Modules
A module is a function extracted to a file. This allows you to import the function and use it in any ...
- RadioButton的check改变的时候
https://stackoverflow.com/questions/8095256/asp-net-radio-button-change You'll need to specify the a ...
- Android 给图片 加边框
图片处理时,有时需要为图片加一些边框,下面介绍一种为图片添加简单边框的方法. 基本思路是:将边框图片裁剪成八张小图片(图片大小最好一致,不然后面处理会很麻烦),分别对应左上角,左边,左下角,下边,右下 ...