.net的一个很重要的特性就是跨语言的编程,任何语言都可以相互的调用,(比如C++,可以调用c#写的类),但前提相互调用的语言的约定只能规矩的遵守"CLS(公共语言规范)"的所有特性才可以,否则这中跨语言的编程将死悄悄拉...
net的汇编ilasm则继承了"CLS(公共语言规范)"所有特性.对于其他语言则也都集成了最小"CLS"规范,相关"GLS"规范可以看 .NET Frame 文档...
如果你想成为一个多语中编程的高手,想在.net平台下跨语言的编程,就必须熟悉 相关"CLS"的特性规范...
ilasm汇编不同与x86汇编,它的虚拟字节指令更抽象,更加想面向对象指令...
现在很多论坛对ilasm汇编很热,偶也初学.net,也对这中il汇编有兴趣.
下面 看看一个 输出"hello ilasm" 的Window Console 的ilasm结构:
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
.ver 1:0:5000:0
}
.assembly helloil1
{
}
.module helloil1.exe
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 4096
.corflags 0x00000001
.namespace helloil1 //定义名字空间helloil1
{
.class private auto ansi beforefieldinit Class1 extends [mscorlib]System.Object
{
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint //程序进入点标志
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() //单线城对象模型构造初始化
.maxstack 1 //堆栈定义
ldstr "Hello ilasm" //压入字符串,堆栈压操作
call void [mscorlib]System.Console::WriteLine(string)
//这里输出"Hello ilasm" 调用
call string [mscorlib]System.Console::ReadLine()
//检测回车
pop
ret
}
.method public hidebysig specialname rtspecialname instance void .ctor() cil managed //这是console类构造
{
.maxstack 1
ldarg.0
call instance void [mscorlib]System.Object::.ctor()
ret
}
}
}
ilasm汇编编译器在路径:C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\ilasm.exe
编译成功,,输出" hello ilasm" ,它是个Window Console程序,至于生成一个
Window Form 程序的ilasm汇编结构,我会在下一遍给予介绍..
偶大略的说说.详细可以看看.NET Frame 文档...
static void Main(string[] args) cil managed
这是程序托管入口,static void Main(),
.assembly 特性定义一个程序集,可以模糊的认为程序集是.net环境中生成的EXE,或DLL,但只中EXE 或DLL,与.net之前的有又不同,它们更象组件相互封装,配属...具体看.NET Frame 文档...
.module 特性区别与.assembly,可以把.module理解为.net之前的exe或dll..
.imagebase 影象基地址..
.subsystem 连接系统类型
.file alignment 文件对齐数值
.corflags 指令设置运行库头文件标志.默认情况下,.corflags 指令指定值 1
.namespace 定义名字空间
由于初学.net有描述错误,大家请指点...