• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> WEB开发 >> .NET 开发 >> 详细内容
 

推荐文章

 
 

热点文章

  • FckEditor远程图片下载插件
  • TFS(Team Foundation Server)使用经验
  • IIS过滤器实现.NET程序不破解DLL替换字符串一法
  • 为ASP.NET封装的SQL数据库访问类
  • ASP.NET2.0中文验证码的实现
  • Url地址重写,利用HttpHander手工编译页面并按需生成静..
  • ASP.NET学习笔记一——ASP和ASP.NET比较
  • 使用HtmlInputHidden 控件在本页面保持状态和跨页面传..
  • ASP.Net发邮件
  • Silverlight 2.0中文学习资源集萃
  • WinForm中使用XtraGrid控件,实现在界面中动态修改列显..
  • 解析ASP.NET木马文件操作
 
 

相关文章

  • Google发布Beta版Android SDK
  • PHP中$_SERVER的详细用法
  • .NET/Rotor源码研究1补遗 - 解决无法检测操作系统版本..
  • .NET / Rotor源码分析5 - 开始使用WinDbg+SOS调试,ss..
  • .NET / Rotor源码分析4 - 修改Rotor使其发送CLR Notif..
  • .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:W..
  • .NET / Rotor 源码研究2 – PAL Initialization / Term..
  • .NET / Rotor 源码研究1 - Building Rot
  • 谈.NET中几个怪异的CustomAttribute
  • .NET Main函数参数解释过程和特殊规则
  • .NET中的幕后英雄:MSCOREE.DLL
  • .NET Interop: 从IErrorInfo错误对象获得托管代码的异..
 
 

百度搜索

 
 

.NET SDK中CorFlags.Exe的用法

  • 阅览次数:
  • 文章来源: http://blog.csdn.net/atfield
  • 原文作者:
  • 整理日期: 2008-07-18
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

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
 
先解释一下每一项的意义:
项目
含义
对应
Version
Assembly所对应的Framework版本
IMAGE_COR20_HEADER.dwMajorRuntimeVersion
IMAGE_COR20_HEADER.dwMinorRuntimeVersion
CLR Header
CLR文件头的版本号
IMAGE_COR20_HEDER.MetaData
PE
PE文件的类型,包含PE32/PE32+
Magic=

IMAGE_NT_OPTIONAL_HDR32_MAGIC or

IMAGE_NT_OPTIONAL_HDR64_MAGIC
CorFlags
 
IMAGE_COR20_HEADER.Flags
CorFlags根据这个值来解析下面的选项
ILONLY
是否仅仅包含IL代码,0/1
COMIMAGE_FLAGS_ILONLY=0x1
32 BIT
是否仅以32BIT运行,0/1
COMIMAGE_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 CPU
PE32
1
0
Pure x86
PE32
1
1
Pure x64
PE32+
1
0
Mixed x86
PE32
0
0
Mixed x64
PE32+
0
0
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除了可以输出这些信息之外,还可以一定程度上修改这些信息,用法比较简单,只要了解各个输出的含义就可以了。但是除非对相关信息的含义以及对目标程序非常了解,一般情况下最好不要修改这些信息,以避免出现无法预料的问题。

上一篇:PHP使用zlib扩展实现页面GZIP压缩输出
下一篇:构建支持Master/Slave读写分离的数据库操作类
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号