![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MSIL简介
Nagi_Way
这个作者很懒,什么都没留下…
展开
-
MSIL简介 - Part1 - HelloWorld
原文链接让我们从一个简单的main函数开始。和C#不同,CLI不要求一个方法属于一个类。入口函数也不一定要叫做main;但是为了简单起见,我将会使用这个命名。.method static void main(){ .entrypoint .maxstack 1 ldstr "Hello world!" call void [mscorlib]System.Consol翻译 2017-04-03 16:20:21 · 445 阅读 · 0 评论 -
MSIL语言概览
原文链接官方文档 名称 说明 Add 将两个值相加并将结果推送到计算堆栈上。 Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上。 Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算堆栈上。 And 计算两个值的按位“与”并将结果推送到计算堆栈上。 Arglist 返回指向当前方法的参数列表的非托管指针转载 2017-04-03 15:56:44 · 701 阅读 · 0 评论 -
MSIL简介 - Part 2 - 使用局部变量
在MSIL简介系列的第2部分,我将会探索局部变量的使用。如果没有变量,那么一个程序将会很无聊。为了解释如何使用变量,让我们写一个简单的求和程序。在一个MSIL函数中,变量可以通过.locals指令声明..locals init (int32 first, int32 second, int32 result)这个代码为当前函数声明了3个局部变量。本例中,它们恰好是 int32类型, 是翻译 2017-04-03 16:40:16 · 402 阅读 · 0 评论 -
MSIL简介 - Part 3 - 定义类型
在本期的MSIL 系列中,我将描述类型是怎么定义的。 下面是一个最小引用类型,House。.class Kerr.RealEstate.House{ .method public void .ctor() { .maxstack 1 ldarg.0 // push "this" instance onto the stack call翻译 2017-04-04 20:00:43 · 410 阅读 · 0 评论 -
拆箱解疑
《CLR via C#》中文第4版P112写道 “拆箱其实就是获取指针的过程,该指针包含在一个对象的原始值类型(数据字段)。其实,指针指向的是已装箱失利中的未装箱部分。所以和装箱不同,拆箱不要求在内存中赋值任何字节”我一开始的理解是,对于一个普通的表达式Point a = (Point) o, (Point)o 强制类型转换这部分是拆箱,然后赋值运算符导致了赋值,所以拆箱不要求在内存中赋值任何原创 2017-04-03 19:28:17 · 278 阅读 · 0 评论 -
定制特性 MISL表示
着急的同学可以直接看结果。。起因书上说获取TypeInfo对象会强迫CLR确保已加载类型的定义程序集,从而对类型进行解析。这个操作可能代价高昂。如果只需要类型引用(Type对象),就应避免这个操作。因为好奇TypeInfo()函数和GetType()函数都做了什么,于是用IL DASM看了一下,然后发现GetType函数里出现了奇怪的东西。。.method public hidebysig inst原创 2017-04-16 12:55:35 · 786 阅读 · 0 评论