收藏本站 
广告服务 
网站地图 
>> 本频道近100000余篇各类电脑技术、网络技术、软件技术、网页及平面设计等方面的电脑教程,我们的原则:不是精华拒不收录!
先飞电脑技术网技术文章网络编程ASP.Net
网络编程 | 网站建设 | 网络技术 | 设计教程 | 软件教学 | 程序开发 | 数据库开发 | 教育认证 | 硬件维护 | 媒体动画 | 机械电子 |

.NET SDK中CorFlags.Exe的使用方法

[ 作者:佚名    转贴自:网络转载    阅读次数:88    更新时间:2007-10-9 17:33:00   录入:刘光勇 ]         
    CorFlags.NET Framework中一个用于查看.NET 可执行文件(PE)的运行参数的非常有用的工具,但是这个工具输出的结果不是特别直观,文档中并没有做出解释,本文将用实际例子解释CORFLAGS的用法。

  首先我们来看一个一般的情况,随便写一个A.CS文件,用CSC编译,并用CorFlags察看

  > csc a.cs

  > corflags a.exe

  Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 2.0.50727.42

  Copyright (c) Microsoft Corporation. All rights reserved.

  Version : v2.0.50727

  CLR Header: 2.5

  PE : PE32

  CorFlags : 1

  ILONLY : 1

  32BIT : 0

  Signed : 0

  先解释一下每一项的意义:

  项目含义对应

  VersionAssembly所对应的Framework版本IMAGE_COR20_HEADER.dwMajorRuntimeVersion

  IMAGE_COR20_HEADER.dwMinorRuntimeVersion

  CLR HeaderCLR文件头的版本号IMAGE_COR20_HEDER.MetaData

  PEPE文件的类型,包含PE32/PE32+Magic=

  IMAGE_NT_OPTIONAL_HDR32_MAGIC or

  IMAGE_NT_OPTIONAL_HDR64_MAGIC

  CorFlags IMAGE_COR20_HEADER.Flags

  CorFlags根据这个值来解析下面的选项

  ILONLY是否仅仅包含IL代码,0/1COMIMAGE_FLAGS_ILONLY=0x1

  32 BIT是否仅以32BIT运行,0/1COMIMAGE_FLAGS_32BITREQUIRED=0x2

  Signed是否经过签名COMIMAGE_FLAGS_STRONGNAMESIGNED =0x8

  PE文件的类型需要解释一下,Windows中PE文件也就是可执行文件,存在两种类型(以前还有LE等等,已淘汰):PE32和PE32+

  PE32是既可以在32位下运行,也可以在64位下运行,而PE32+只能在64位下面运行。这里有一点需要澄清的是,普通的PE32文件,如果里面代码有非托管代码,那么只能以32位运行,不管是在32位Windows还是64位的Windows。但是如果PE32中仅含有托管代码,那么在64位Windows下面则可以以64位运行,因为CLR可以将托管代码编译为64Bit并运行,并且将其作为PE32+对待。

  对应不同的平台的托管代码对应的CorFlags的结果是不一样的。

  平台PE32/PE32+IL Only?32-Bit?

  Any CPUPE3210

  Pure x86PE3211

  Pure x64PE32+10

  Mixed x86PE3200

  Mixed x64PE32+00

  Pure指纯托管程序,而Mixed指混合。

  Any CPU必然只能是IL Only,不能含有平台相关的非托管代码。而x86和AnyCPU一样,都是PE32文件,区别在于文件头上的32-Bit的标志设置为1,表明其只能以32-Bit运行。X64则必然是PE32+,可以包含64位非托管代码。

  举一个例子:

  > corflags C:\windows\microsoft.net\Framework\v2.0.50727\System.dll

 Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 2.0.50727.42

  Copyright (c) Microsoft Corporation. All rights reserved.

  Version : v2.0.50727

  CLR Header: 2.5

  PE : PE32

  CorFlags : 9

  ILONLY : 1

  32BIT : 0

  Signed : 1

  可以看到我机器上面32Bit的.NET Framework 2.0 RTM版本里面的System.DLL是对应v2.0.50727版本的,属于PE32文件,是IL Only,不是32Bit的,因此这个是用AnyCPU来编译的。Corflags = 9 = COMIMAGE_FLAGS_ILONLY (1) + COMIMAGE_FLAGS_STRONGNAMESIGNED (8)

  最后我们来看一个混合托管代码和非托管代码的例子:

  >cl /clr a.cpp

  Microsoft (R) C/C++ Optimizing Compiler Version 14.00.50727.762

  for Microsoft (R) .NET Framework version 2.00.50727.1416

  Copyright (C) Microsoft Corporation. All rights reserved.

  a.cpp

  Microsoft (R) Incremental Linker Version 8.00.50727.762

  Copyright (C) Microsoft Corporation. All rights reserved.

  /out:a.exe

  a.obj

  > corflags a.exe

  Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 2.0.50727.42

  Copyright (c) Microsoft Corporation. All rights reserved.

  Version : v2.0.50727

  CLR Header: 2.5

  PE : PE32

  CorFlags : 0

  ILONLY : 0

  32BIT : 0

  Signed : 0

  可以看到用/CLR编译选项编译出来的C++/CLI的代码总是混合的,因此是 ILONLY=0,值得注意的是其32BIT=0,说明当ILONLY=0的时候,CLR不需要32BIT=0就可以判断出这个PE32文件必然要在32BIT下面运行。

  CorFlags除了可以输出这些信息之外,还可以一定程度上修改这些信息,用法比较简单,只要了解各个输出的含义就可以了。但是除非对相关信息的含义以及对目标程序非常了解,一般情况下最好不要修改这些信息,以避免出现无法预料的问题。

文章首页【加入到收藏夹】告诉好友】【打印此文】【关闭窗口
  版权声明:本站提供的“.NET SDK中CorFlags.Exe的使用方法”版权归文章所有者,转载请注明出处!
 ·上一篇文章:ASP.NET中的Windows身份验证详解      ·下一篇文章:ASP.NET 2.0中客户端脚本使用总结
相关文章
·支付宝Payto接口的C#.net实现方法[33]
·面向VB开发人员的ASP.NET 2.0简介[40]
·ASP.NET中的日期与时间的处理方法[88]
·ASP.NET 2.0中客户端脚本使用总结[74]
·.NET SDK中CorFlags.Exe的使用方法[88]
网站主页 | 收藏本页 | 联系我们 | 广告服务 | 站点地图 | 会员注册 | 招聘信息 | 内容指正

联系QQ:先飞电脑技术网站事务联系QQ,点击可以直接留言. 32933427 电话:13710542091 [世界排名] 鄂ICP备05005890号 先飞电脑教程网