一切从IL开始】的更多相关文章

异常处理在程序中也算是比较重要的一部分了,IL异常处理在C#里面实现会用到一些新的方法 1.BeginExceptionBlock:异常块代码开始,相当于try,但是感觉又不太像 2.EndExceptionBlock:异常块代码结束,BeginExceptionBlock相当于try,EndExceptionBlock却不是try结束.而是整个异常块处理的结束. 3.BeginCatchBlock:catch块代码 4.BeginFinallyBlock:finally块代码 5.ThrowE…
最简单的IL程序 .assembly test {} .method void Func() { .entrypoint ldstr "hello world" call void [mscorlib]System.Console::WriteLine(string) ret } 对上面的程序说明如下: .assemble伪指令用来声明程序集,该关键字是必须的 .method伪指令用来申明方法 .entrypoint伪指令用来表示程序的入口函数(方法),一个程序只能有一个入口,且不能放…
既然了解了IL的接口和动态类之间的知识,何不使用进来项目实验一下呢?而第一反应就是想到了平时经常说的IOC容器,在园子里搜索了一下也有这类型的文章http://www.cnblogs.com/kklldog/p/3395641.html,借鉴一下前人的知识就来实现一下吧.IOC的概念就不介绍了,想了解的同学就百度一下. 一.定义接口 首先自定义两个接口和实现 public interface IAnimal { string Cat(); string Dog(); } public class…
上一篇文章学习了IL的入门,接下来我们再通过两个例子来了解下类的属性.构造函数以及接口的使用 一.类的属性.构造函数 1.先看下我们要构建的类的C#代码,然后再进行IL的实现,示例代码如下: [Serializable] public class Dynamic { ; public const string ConstField = "const"; /// <summary> /// 定义属性 /// </summary> public int A { ge…
一.概述: 近来也是在看AOP方面的东西,了解到Emit可以实现.之前对Emit的了解也就是停留在Reflector针对方法反编译出来的部分指令.就用这次机会学习下Emit也用这篇随笔记录下学习的过程.某些我也不了解的地方也希望各位了解的朋友指导下. 学习前可以先了解下Opcodes 二.工具 1.vs2015 2..NET Reflector 9.0 三.入门示例 1.输出Hello World C#代码 static void Main(string[] args) { Console.Wr…
转自:这里(然而这里并没有写原出处) 背景:今天傻逼逼地想用vs2010来编译一个vs2013的项目,其中这个项目用到了一个库(应该是用2013编译的) 在我浅薄的认知中,以为只是13支持的特性更多,如果没有用到一些2010编译器不支持的特性应该用10也是能跑的, 结果告诉我,我是那么的天真,其中还要跨越一个叫链接器这样的领域(然而我又不太懂这个编译器,只是稍微了解过) 结果就出现了c1900,参考了这个资料后,大概明白了原来还有ltcd这回事... 总结一下文章要点,详情请点入去看,这里就不直…
第一步: 找到IL DASM的安装位置,默认在C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools 第二步: 打开vs菜单工具->外部工具 如图填上相应的参数,编译好项目,直接点击 VS菜单工具->IL DASM 就可以查看项目的IL了. 附: IL指令大全…
IL介绍 通用中间语言(Common Intermediate Language,简称CIL,发音为"sill"或"kill")是一种属于通用语言架构和.NET框架的低阶(lowest-level)的人类可读的编程语言.目标为.NET 框架的语言被编译成CIL,然后汇编成字节码.CIL类似一个面向对象的汇编语言,并且它是完全基于堆栈的.它运行在虚拟机上,其主要的语言有C#.Visual Basic .NET.C++/CLI以及 J♯. 在.NET语言的测试版中,CI…
静态属性赋值 先来看 Reflector反射出的IL源码(感谢Moen的提示),这次用 Release模式编译,去掉那些无用的辅助指令 public void AAA(string s) { MyClass.Name = s; } .method public hidebysig instance void AAA(string s) cil managed { //L_0000: ldarg.1 //这个是真正反射出的内容,但是理论上 这里应该是ldarg.0 //下面一行是我特意修改的,上面…
先说说学IL有什么用,有人可能觉得这玩意平常写代码又用不上,学了有个卵用.到底有没有卵用呢,暂且也不说什么学了可以看看一些语法糖的实现,或对.net理解更深一点这些虚头巴脑的东西.最重要的理由就是一个:当面试官看你简历上写着精通C#时,问你一句: "懂不懂IL?" 怎么回答? "不好意思,那东西没什么卵用,所以我没学." 还是 "还行,可以探讨一下." 你觉得哪个回答好呢,答得好才更有底气要到更多的薪资,多个几千块也说不定,而这只不过花上不到半小…