C# via CLR之IL中间语言初步探索
来源:互联网 发布:金 富力士 知乎 编辑:程序博客网 时间:2024/04/29 03:41
我们先写个最简单的Console App,打印出一行字符:
using System;
using System.Collections.Generic;
using System.Text;
namespace ILTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Test App for IL");
}
}
}
编译成功以后,得到一个exe文件.
我们用MSIL Disassembler打开这个.net编译的扩展了的PE格式的EXE文件,得到Metedata和IL.
ILTest.Program在ILDASM反编译出来有三个方法,本别是
//方法一:
.class private auto ansi beforefieldinit ILTest.Program
extends [mscorlib]System.Object
{
} // end of class ILTest.Program
//方法二:
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 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
//方法三:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Test App for IL"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Program::Main
除此之外,在这个PE32文件中还包含一个"清单(MainFest)"的数据块.清单是由元数据表构成的另外一种集合.这些表描述了构成程序集的文件.由程序集中的文件实现的公共导出的类型,以及和这些程序集关联在一起的一些资源或者是数据文件.
同时,在Debug文件夹下面还生成了一个与项目文件同名的 <项目文件名>.vshost.exe文件.这个文件是一个提高调试性能的宿主进程,,支持部分信任调试并支持设计时表达式计算。
另外,还包含了一个同名的pdb文件,程序数据库文件,保存着调试和项目的状态信息的一个文件.从而可以对调试配置进行增量链接.当用 /ZI 或 /Zi 编译 C/C++ 程序时或用 /debug 编译 Visual Basic/C# 程序时将创建 PDB 文件.对于本机代码,它驻留在 /debug 子目录中。而对于托管代码,它驻留在 /WINDEBUG 子目录中。
using System;
using System.Collections.Generic;
using System.Text;
namespace ILTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Test App for IL");
}
}
}
编译成功以后,得到一个exe文件.
我们用MSIL Disassembler打开这个.net编译的扩展了的PE格式的EXE文件,得到Metedata和IL.
ILTest.Program在ILDASM反编译出来有三个方法,本别是
//方法一:
.class private auto ansi beforefieldinit ILTest.Program
extends [mscorlib]System.Object
{
} // end of class ILTest.Program
//方法二:
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 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
//方法三:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Test App for IL"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Program::Main
除此之外,在这个PE32文件中还包含一个"清单(MainFest)"的数据块.清单是由元数据表构成的另外一种集合.这些表描述了构成程序集的文件.由程序集中的文件实现的公共导出的类型,以及和这些程序集关联在一起的一些资源或者是数据文件.
同时,在Debug文件夹下面还生成了一个与项目文件同名的 <项目文件名>.vshost.exe文件.这个文件是一个提高调试性能的宿主进程,,支持部分信任调试并支持设计时表达式计算。
另外,还包含了一个同名的pdb文件,程序数据库文件,保存着调试和项目的状态信息的一个文件.从而可以对调试配置进行增量链接.当用 /ZI 或 /Zi 编译 C/C++ 程序时或用 /debug 编译 Visual Basic/C# 程序时将创建 PDB 文件.对于本机代码,它驻留在 /debug 子目录中。而对于托管代码,它驻留在 /WINDEBUG 子目录中。
- C# via CLR之IL中间语言初步探索
- 初读CLR Via C# 之 IL、CTS、CLS
- Reflecting of Attribute via IL in CLR探索
- C#中间语言IL初探
- C#中CLR(公共语言运行时)与IL(中间代码)
- CLR via C# 之旅
- 初读CLR Via C# 之 堆栈
- 中间语言(IL)
- 中间语言(IL)
- 中间语言(IL)
- 中间语言(IL)
- IL(中间语言)
- 复习框架设计CLR VIA C# 第二章 之 使用多语言环境
- 继承之跨语言继承:inherit from C# to VB.net via CLR
- CLR via C#摘抄
- clr via c#读书笔记
- CLR via C#
- clr via c# 小记
- MSIL系列:关于Boxing和堆栈,栈的几个问题的回答
- dumpbin展示.Net PE文件格式
- Head First IL中间语言之 实例深入经典诠释
- MSIL指令及其参数详解(ldc指令诠释篇)
- Reflecting of Attribute via IL in CLR探索
- C# via CLR之IL中间语言初步探索
- JS动态增加页面上的控件实例
- MSIL的两种编译模式
- Equals方法的重写实例 及 运算符重载
- C# Object.Equals方法深入研究
- 继承之跨语言继承:inherit from C# to VB.net via CLR
- Google Registering Mashup Search Domains
- 最新消息:DotNet将发布部分FrameWork源码
- .Net 开源框架