CLR via C# 读书笔记(一)基本工具等

工具的使用

关于ILDASM.exe等工具,直接使用VS命令行执行即可。在开始菜单的,vs目录下Visual Studio Tools,如vs2013的Developer Command Prompt for VS2013。然后执行

D:\Program Files (x86)\Microsoft Visual Studio 12.0>ildasm

即可打开相应程序。


编译工具

csc.exe是代码编译工具,vs中调用的也是这个。手工执行方法同上。

如对以下代码编译:

 1 namespace TestCSharp
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             System.Console.WriteLine("hi");
 8         }
 9     }
10 }

 

D:\Program Files (x86)\Microsoft Visual Studio 12.0>csc.exe /out:Program.exe /t:exe /r:MSCorLib.dll D:\WorkSpaces\TestCSharp\TestCSharp\Program.cs

/out: 输出文件名称,默认为Program.exe
/t: 编译文件类型,默认为exe。还有winexe,appcontainerexe,moudle,library

/r:引用的文件,默认自动引用。 如果不自动引用MSCorLib.dll,使用/nostdlib。

响应文件

存储编译配置的文件,个人理解为类似于c++中的make文件。

如:MyProject.rsp

/out:MyProject.exe

/target:winwxe


 

csc.exe @MyProject.rsp File1.cs File2.cs


.Net FrameWork安装时有默认全局文件CSC.rsp,csc.exe执行时除了使用命令行提供的响应文件,还会查找全局CSC.rsp

使用/noconfig 可以忽略所有响应文件


元数据

使用ILDasm查看编译的文件,可以在View中查看相应的元数据。

托管PE文件包含:PE32(+)头,CLR头,元数据(Meta),IL。

元数据,包含 定义表、引用表、清单表。

(名称均是见名知义)

常用定义元数据表:

ModuleDef 模块

TypeDef 类型

MethodDef 方法

FieldDef 字段

ParamDef 参数

PropertyDef 属性

EventDef 事件

常用的引用元数据表:

AssemblyRef 引用的程序集

ModuleRef 引用的模块

TypeRef 引用的类型

MemberRef 引用的成员(字段、方法、属性方法和事件方法)


示例:

 1 ===========================================================
 2 ScopeName : TestCSharp.exe
 3 MVID      : {7835BE5C-A95F-46BE-85FA-E45FF54966F2}
 4 ===========================================================
 5 Global functions
 6 -------------------------------------------------------
 7 
 8 Global fields
 9 -------------------------------------------------------
10 
11 Global MemberRefs
12 -------------------------------------------------------
13 
14 TypeDef #1 (02000002)
15 -------------------------------------------------------
16     TypDefName: TestCSharp.Program  (02000002)
17     Flags     : [NotPublic] [AutoLayout] [Class] [AnsiClass] [BeforeFieldInit]  (00100000)
18     Extends   : 01000001 [TypeRef] System.Object
19     Method #1 (06000001) [ENTRYPOINT]
20     -------------------------------------------------------
21         MethodName: Main (06000001)
22         Flags     : [Private] [Static] [HideBySig] [ReuseSlot]  (00000091)
23         RVA       : 0x00002050
24         ImplFlags : [IL] [Managed]  (00000000)
25         CallCnvntn: [DEFAULT]
26         ReturnType: Void
27         1 Arguments
28             Argument #1:  SZArray String
29         1 Parameters
30             (1) ParamToken : (08000001) Name : args flags: [none] (00000000)
31 
32     Method #2 (06000002) 
33     -------------------------------------------------------
34         MethodName: .ctor (06000002)
35         Flags     : [Public] [HideBySig] [ReuseSlot] [SpecialName] [RTSpecialName] [.ctor]  (00001886)
36         RVA       : 0x0000205e
37         ImplFlags : [IL] [Managed]  (00000000)
38         CallCnvntn: [DEFAULT]
39         hasThis 
40         ReturnType: Void
41         No arguments.
42 
43 
44 TypeRef #1 (01000001)
45 -------------------------------------------------------
46 Token:             0x01000001
47 ResolutionScope:   0x23000001
48 TypeRefName:       System.Object
49     MemberRef #1 (0a000012)
50     -------------------------------------------------------
51         Member: (0a000012) .ctor: 
52         CallCnvntn: [DEFAULT]
53         hasThis 
54         ReturnType: Void
55         No arguments.

Tip: .ctor是构造函数

常用清单元数据表:

AssemblyDef 程序集信息

FileDef 文件信息

MainfestResourceDef 资源文件信息

ExportedTypesDef 导出的public类型的记录

 


AL.exe

程序集链接器

/link 资源文件

标准的win32资源(如果*.res,*ico),直接可使用/win32res

/c: 本地化,如“en-US”

posted on 2016-03-01 16:45  阿呜的边城  阅读(179)  评论(0)    收藏  举报

导航