IL语言(一)-HelloWorld解析
来源:互联网 发布:淘宝起名符号 编辑:程序博客网 时间:2024/05/17 07:42
IL语言(也称为公共中间语言CIL,或微软中间语言MSIL)是.NET的核心,以.NET Framework平台运行的程序最终都是由IL代码实现。也可以这样理解,无论C/C++、BASIC、Pascal等语言特征如何,在INTEL芯片上最终执行的都是Intel汇编指令集。了解IL相关知识能够以较高层次理解.NET工作原理,最大程度利用.NET Framework进行高级程序开发。
1、能更好地理解托管代码内部运行机制,研究编译器生成的IL代码可以获得文档中没有涉及到的信息。
2、查看IL代码可以帮助调试或设计代码,以便于进行性能优化,理解各种常用语言所具有的优势。
3、直接采用IL语言编程有助于实现用其他语言无法实现的IL特性。
4、编写开发工具,如编译器或调试器,理解IL则是一个先决条件。
学习IL语言,首先需要学会使用两个工具,分别为ilasm.exe(MSIL 反汇编程序)和ildasm.exe(MSIL 反汇编程序)。通过该工具,我们可以打开任何.net可执行文件(exe或dll)并查看其MSIL代码。
ilasm是命令行程序,在/%System%/ Microsoft.NET /Framework /vn.nn.nn目录下。
ilasm [options] filename [[options]filename...]
ildasm是图形程序,在/FrameworkSDK/vn.n/Bin/目录下。
符号
含义
更多信息
命名空间
类
接口
值类
枚举
方法
静态方法
字段
静态字段
事件
属性
清单或类信息项
Hello World程序是学习一门语言所接触的第一个程序,为了更好介绍IL语言格式,我根据Helloworld.il纯文本和ildasm反编译IL码解释IL语言。
//////////////////////////////////////////////////////////////////////////////////////////
// Microsoft (R) .NET Framework IL Disassembler. Version 1.1.4322.573
// Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
// PE Header:
// Subsystem: 00000003
// Native entry point address: 0000225e
// Image base: 00400000
// Section alignment: 00002000
// File alignment: 00000200
// Stack reserve size: 00100000
// Stack commit size: 00001000
// Directories: 00000010
//HelloWorld.il
//This is our first IL Program
// 支持用//语法表示单行注释,用/* ...*/表示多行或部分注释
.assembly extern mscorlib{} //指示此程序集代码引用的其他程序集。可以拥有多个extern指令。
.assembly HelloWorld //指示汇编程序插入一个程序集清单
{
.ver 1:0:1:0 //程序集版本号。可以在花括号{}中包含其他信息(如公钥或程序集版本号)
}
.module HelloWorld.exe //该指令声明一个模块,并指出存储该模块的文件名称
// MVID: {FC444559-FB26-4E01-88E6-BE721E6DFC5E} Mvid是一个GUID表示此Module,其它域保留
.imagebase 0x00400000 //为影像基地址
.subsystem 0x00000003 //连接系统类型,0x00000003表示从控制台运行
.file alignment 512 //文件对齐数值
.corflags 0x00000001 //指令设置运行库头文件标志.默认情况下,.corflags 指令指定值 1
// Image base: 0x07560000
.method static void Main() cil managed
{
.entrypoint // 该指令定义程序的入口
// 方法在 RVA 0x2050 处开始
// 代码大小 11 (0xb)
.maxstack 1 //指出方法的计算栈需要多大空间
IL_0000: ldstr "Hello , World !" //把字符串压入堆栈中
//调用静态System.Console.WriteLine方法
//方法参数引用栈顶元素,栈顶元素从栈中弹出。栈为空。
IL_0005: call void [mscorlib]System.Console::WriteLine(string)
//从方法中返回,如栈顶为空则返回空,否则返回栈顶元素
IL_000a: ret
}
///////////////////////////////////////////////////////////////////////////////////////
好累,终于写出第一节了,明天继续....
- IL语言(一)-HelloWorld解析
- IL语言学习(一)
- IL语言学习(一)
- IL语言学习(一)
- il语言
- IL中间语言理解学习001-Add加法解析
- 中间语言(IL)
- 中间语言(IL)
- 中间语言(IL)
- 中间语言(IL)
- IL(中间语言)
- IL浅析(一)
- C 语言现代编程一 HelloWorld
- .Net IL中间语言速查表
- C#中间语言IL初探
- Go语言学习笔记(一) [Go语言的HelloWorld]
- IL
- LINK : warning LNK4076: invalid incremental status file "Debug/helloworld.il
- 样本库再次修改
- 输入四个字母实现全排列
- Java开发者的十大戒律
- 戏说软件工程
- 20世纪最好的10个算法
- IL语言(一)-HelloWorld解析
- 只允许输入字母或数字的文本框
- 专门为U盘设计的Linux系统
- 托管项目日志
- 如何解决页面上的js错误“行2,字符1”
- C++ Primer Plus 第四章 复合类型
- 全排列生成算法之一——字典排序算法
- OTing
- SQL Server 2005远程访问