几个与.NET框架相关缩写的总结

本文是对几个与.NET框架相关的缩写的总结

1.CIL: Common Intermediate Language - 公共中间语言

CIL也叫MSIL(Microsoft Intermediate Language),后来进行了标准化,成为CIL,有时也简写作IL。是一种高级程序语言。C#、VB.NET程序经过各自的编译器生成CIL代码。CIL需要.NET运行时(.NET runtime)环境的支持,执行前,进行一个被称为JIT(Just-in-time)的二次编译过程,才能变成计算机可以识别的指令。

2.ILDASM: Intermediate Language DisASseMbler - 中间语言反汇编工具

ILDASM可以将.NET程序反编译为CIL,ILASM可以将CIL编译成可执行文件或类库

在Windows的CMD(命令提示符,控制台)中并没有ildasm命令和ilasm命令,要想在CMD中添加这个命令,需要在里面执行一个BAT脚本,这个脚本就在VS安装目录下的“\Common7\Tools\”里,名叫“VsDevCmd.bat”。在我的计算机里,这个BAT文件的绝对路径为:“D:\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat”

如果不想这么麻烦,可以在开始菜单中所有程序里的VS目录(我的是“Microsoft Visual Studio 2012”)下,找到“Visual Studio Tools”里的“VS2012 开发人员命令提示”,进入后就可以直接使用ildasm命令了。事实上,这是一个CMD的快捷方式,新建个快捷方式,修改下面两项也能达到“VS2012 开发人员命令提示”同样的效果:

目标:%comspec% /k ""D:\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat""

起始位置:"D:\Microsoft Visual Studio 11.0\"

在这个命令行中输入命令ildasm可以打开一个应用程序“IL DASM”,用这个程序打开.NET生成的EXE文件,即可实现.NET应用程序IL反编译。下面是我用几个.NET上的语言建立的类库通过ILDASM反编译的结果:

1)Visual C# 控制台应用程序:TestA

namespace TestA
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.WriteLine("Hello World!");
        }
    }
}

生成的可执行文件为TestA.exe(大小:5,120字节,占用空间:8,192字节),用IL DASM查看后,结构如下:

几个与.NET框架相关缩写的总结_第1张图片

双击“Main : void(string[])”后可以看到下面这段代码:

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // 代码大小       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "Hello World!"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  ret
} // end of method Program::Main

2)Visual Basic 控制台应用程序:TestB

Module Module1
    Sub Main()
        Console.WriteLine("Hello World!")
    End Sub
End Module

生成的可执行文件为TestB.exe(大小:24,576字节,占用空间:24,576字节),用IL DASM查看后,结构如下:

几个与.NET框架相关缩写的总结_第2张图片

双击“Main : void()”后可以看到下面这段代码:(与C#的非常像)

.method public static void  Main() cil managed
{
  .entrypoint
  .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) 
  // 代码大小       14 (0xe)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "Hello World!"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  nop
  IL_000d:  ret
} // end of method Module1::Main

3)F# 控制台应用程序:TestC

[<EntryPoint>]
let main argv = 
    printfn "Hello World!"
    0

生成的可执行文件为TestC.exe(大小:4,608字节,占用空间:8,192字节),用IL DASM查看后,结构如下:

几个与.NET框架相关缩写的总结_第3张图片

双击“main : int32(string[])”后可以看到下面这段代码:(和C#与VB.NET有很大不同)

.method public static int32  main(string[] argv) cil managed
{
  .entrypoint
  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.EntryPointAttribute::.ctor() = ( 01 00 00 00 ) 
  // 代码大小       19 (0x13)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "Hello World!"
 
 IL_0006:  newobj     instance void class 
[FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5<class 
[FSharp.Core]Microsoft.FSharp.Core.Unit,class 
[mscorlib]System.IO.TextWriter,class 
[FSharp.Core]Microsoft.FSharp.Core.Unit,class 
[FSharp.Core]Microsoft.FSharp.Core.Unit,class 
[FSharp.Core]Microsoft.FSharp.Core.Unit>::.ctor(string)
  IL_000b:  call       !!0 
[FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine<class
 [FSharp.Core]Microsoft.FSharp.Core.Unit>(class 
[FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4<!!0,class 
[mscorlib]System.IO.TextWriter,class 
[FSharp.Core]Microsoft.FSharp.Core.Unit,class 
[FSharp.Core]Microsoft.FSharp.Core.Unit>)
  IL_0010:  pop
  IL_0011:  ldc.i4.0
  IL_0012:  ret
} // end of method Program::main

4)Visual C++ 控制台应用程序:TestD

建立一个空项目,里面添加一个代码文件TestD.cpp,写入下面代码:

#include<stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}

生成的可执行文件为TestD.exe(大小:31,232字节,占用空间:32,768字节),用IL DASM查看:

几个与.NET框架相关缩写的总结_第4张图片

这个文件没有有效的CLR头,因此无法进行反汇编

3.ILASM: Intermediate Language ASseMbler - 中间语言编译工具

把上面2.1中的C#程序,在ILDASM中打开后转储到一个扩展名为il的程序,指定名称:xxx.il

//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.17929




// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly TestA
{
  .custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = ( 01 00 1A 2E 4E 45 54 46 72 61 6D 65 77 6F 72 6B   // ....NETFramework
                                                                                                        2C 56 65 72 73 69 6F 6E 3D 76 34 2E 35 01 00 54   // ,Version=v4.5..T
                                                                                                        0E 14 46 72 61 6D 65 77 6F 72 6B 44 69 73 70 6C   // ..FrameworkDispl
                                                                                                        61 79 4E 61 6D 65 12 2E 4E 45 54 20 46 72 61 6D   // ayName..NET Fram
                                                                                                        65 77 6F 72 6B 20 34 2E 35 )                      // ework 4.5
  .custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = ( 01 00 05 54 65 73 74 41 00 00 )                   // ...TestA..
  .custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyConfigurationAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyProductAttribute::.ctor(string) = ( 01 00 05 54 65 73 74 41 00 00 )                   // ...TestA..
  .custom instance void [mscorlib]System.Reflection.AssemblyCopyrightAttribute::.ctor(string) = ( 01 00 12 43 6F 70 79 72 69 67 68 74 20 C2 A9 20   // ...Copyright .. 
                                                                                                  20 32 30 31 35 00 00 )                            //  2015..
  .custom instance void [mscorlib]System.Reflection.AssemblyTrademarkAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.InteropServices.GuidAttribute::.ctor(string) = ( 01 00 24 66 36 39 37 61 37 32 32 2D 64 35 64 34   // ..$f697a722-d5d4
                                                                                                  2D 34 36 62 36 2D 39 39 33 34 2D 35 30 33 62 62   // -46b6-9934-503bb
                                                                                                  31 64 64 37 30 36 61 00 00 )                      // 1dd706a..
  .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 31 2E 30 2E 30 2E 30 00 00 )             // ...1.0.0.0..

  // --- 下列自定义特性会自动添加,不要取消注释 -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 07 01 00 00 00 00 ) 

  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                             63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
  .hash algorithm 0x00008004
  .ver 1:0:0:0
}
.module TestA.exe
// MVID: {243BEAC1-C1FD-4F5D-91A9-4381400D3AEE}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00020003    //  ILONLY 32BITPREFERRED
// Image base: 0x01260000


// =============== CLASS MEMBERS DECLARATION ===================

.class private auto ansi beforefieldinit TestA.Program
       extends [mscorlib]System.Object
{
  .method private hidebysig static void  Main(string[] args) cil managed
  {
    .entrypoint
    // 代码大小       13 (0xd)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "Hello World!"
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Program::Main

  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // 代码大小       7 (0x7)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method Program::.ctor

} // end of class TestA.Program


// =============================================================

// *********** 反汇编完成 ***********************
// 警告: 创建了 Win32 资源文件 C:\Users\Tsybius\Desktop\xxx.res

除了xxx.il外,转储过程还会创建一个文件:“xxx.res”,不用管它。在命令行中用ilasm命令可以编译xxx.il了

几个与.NET框架相关缩写的总结_第5张图片

编译后生成了一个可执行文件xxx.exe,在命令行中运行这个程序,还是可以打印出字符串“Hello World!”:

几个与.NET框架相关缩写的总结_第6张图片

4.CTS: Common Type System - 公共类型系统

面向.NET的语言(如C#、VB.NET、Delphi.NET等)需要满足的规则。CTS规定了可以在语言中定义的类型(如类、结构、委托等),规定了各种访问性(如Private、Public、Family(C#中的Protected)、Assembly(C#中的internal)、FamilyAndAssembly(C#中没有)和FamilyOrAssembly(C#中的protected internal)),规定了一些约束(如所有的类都隐式继承自System.Object、所有的类只能继承自一个基类)。CIL实现了CTS的全部功能,C#等语言实现的功能是CIL的子集。

5.CLS: Common Language Specification - 公共语言规范

CLS是CTS的一个子集,包括几种面向对象的编程语言的通用功能。符合CLS的组件和工具能够保证与其他符合CLS的组件和工具交互操作

6.CLR: Common Language Runtime - 公共语言运行时

也称为.NET运行时(.NET runtime)。CLR是一个软件层或代理,它管理了.NET程序集的执行,主要包括:管理应用程序域、加载和运行程序集、安全检查、将CIL代码即时编译为机器代码、异常处理、对象析构、垃圾回收等

.NET程序集包括以下几部分:(托管可执行文件的通用结构)

1)PE/COFF头:包含了供操作系统查看和利用的信息

2)CLR头:最重要的作用之一就是告诉操作系统这个PE/COFF文件是一个.NET程序集,区别于其他类型可执行程序

3)CLR数据:元数据、IL代码、托管的结构化异常处理信息、托管资源

4)本地数据和代码(如果有)

7.CLI: Common Language Infrastructure - 公共语言基础

CLI是一个由ECMA和ISO进行标准化的国际标准。CLI包括:CIL、CTS、CLS、VES、元数据、基础框架。CLI是.NET框架是该标准的具体实现。CLR也是.NET框架中对VES的具体实现,VES即“Virtual Execution System”,汉语意为虚拟执行系统

Standard ECMA-335 - Common Language Infrastructure (CLI)

http://www.ecma-international.org/publications/standards/Ecma-335.htm

8.BCL: Base Class Library - 基础类库

BCL中包含了与编译器及CIL语言关系紧密的核心类型,以及常见开发任务中都会使用到的类型。BCL是FCL的一个子集

9.FCL: Framework Class Library - 框架类库

FCL是一个.NET Framework上的标准库的实现,它在CLI中定义。FCL是一组可复用的类、接口和值类型,BCL是FCL的核心并为之提供了最基本的功能

FCL包括下面几个库:

1)Base Class Library

2)Runtime Infrastructure Library

3)Network Library

4)Reflection Library

5)XML Library

6)Extended Array Library

7)Extended Numerics Library

8)Parrallel Library

9)Vararg Library

END

你可能感兴趣的:(.net,缩写)