msil实用指南-方法的调用(代码片段)

TKT2016 TKT2016     2022-11-04     694

关键词:

方法调用指令主要有Call和Callvirt。

调用static或sealed修饰的方法,用Call指令。

调用virtual或abstract修饰的方法,用Callvirt指令。

代码实例:

ilGenerator.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[]  typeof(int)));

 

msil实用指南-类相关生成(代码片段)

一、创建class用MethodBuilder的DefineType方法,可以指定父类,得到一个TypeBuilder对象。二、实现继承接口用TypeBuilder的AddInterfaceImplementation方法。三、显示方法重写用TypeBuilder的DefineMethodOverride方法。完整代码如下: usingSystem;usingSyst... 查看详情

msil实用指南-创建方法和定义参数(代码片段)

 本篇讲解实现创建方法、指定参数的名称、实现参数加out和ref修饰符、以及参数加默认值。创建方法创建方法用类TypeAttributes的DefineMethod(stringname,MethodAttributesattributes,TypereturnType,Type[]parameterTypes)方法,返回结果是MethodBuilder,... 查看详情

msil实用指南-闭包的生成和调用(代码片段)

闭包(Closure)是词法闭包(LexicalClosure)的简称。对闭包的具体定义有很多种说法,这些说法大体可以分为两类:一种说法认为闭包是符合一定条件的函数,比如参考资源中这样定义闭包:闭包是在其词法上下文中引用了自由变... 查看详情

msil实用指南-生成属性(代码片段)

本篇讲解怎么生成属性,包括get和set方法。第一步,生成一个字段生成字段用TypeBuilder.DefineField方法。实例代码:FieldBuildercustomerNameBldr=typeBuilder.DefineField("_CustomerName",typeof(string),FieldAttributes.Private); 第二步,创建一个Property 查看详情

msil实用指南-局部变量的声明保存和加载(代码片段)

这一篇讲解方法内的局部变量是怎么声明、怎样保存、怎样加载的。声明局部变量声明用ILGenerator的DeclareLocal方法,参数是局部变量的数据类型,得到一个局部变量对应的创建类LocalBuilder。使用格式是LocalBuilderlocalBuilderx=ilGenerator... 查看详情

msil实用指南-比较运算(代码片段)

数值的比较就是大于、小于、等于、大于等于、小于等于、不等于,它们的运算结果都是布尔值。大于、小于、等于有直接对应的指令,分别是Cgt、Clt、Ceq。大于等于、小于等于、不等于没有直接对应的指令,它的运算实现一般... 查看详情

msil实用指南-字段的加载和保存(代码片段)

 字段有静态字段和非静态字段之分,它们的加载保存指令也是不一样的,并且非静态字段要生成this。静态字段的加载加载静态字段的指令是Ldsfld。ilGenerator.Emit(OpCodes.Ldsfld,<FieldBuilder>);实际例子ilGenerator.Emit(OpCodes.Ldsfld,are... 查看详情

msil实用指南-加载nullstringlongfloatdouble等值(代码片段)

本篇讲述怎么加载null、string值、long值、float值、double值。加载null不需要参数值,只要Emitldnull其它几个命令要Emit<指令><值> 加载null加载null是很简单的,使用OpCodes.Ldnull,以下一句程序就可以了。ilGenerator.Emit(OpCodes.Ld... 查看详情

msil实用指南-数据类型转换

一、类的强制转换1.转换成某个类用Castclass指令。实例代码:ilGenerator.Emit(OpCodes.Castclass,typeof(ClassA));2.转换成某个值类型用Unbox_Any指令。实例代码:ilGenerator.Emit(OpCodes.Unbox_Any,typeof(DateTime));ilGenerator.Emit(OpCodes.Unbox_Any 查看详情

msil实用指南-生成for语句

for语句格式是这样的for(<初始化语句>;<条件语句>;<自增减语句>) <循环体>它可以转换为while语句if(<条件语句>) <初始化语句> while(<条件语句>) <循环体> <自增减语句> 那么就可以按照这while... 查看详情

浅析msil中间语言——基础篇(代码片段)

...,这是我了解MSIL的主要原因。托管代码表示应用程序的方法的功能,它们以微软的中间语言(Microsoftintermediatelanguage,MSIL)或公共语言运行(comm 查看详情

vim实用指南和系统相互复制粘贴(代码片段)

文章目录依赖检查vim复制到系统剪切板系统剪切板复制到vim中放大招依赖检查要完成vim中的内容复制到系统剪切板,需要vim支持+clipboard,检查的方法(ubuntu16.04为例):打开terminal(ctl+alt+t)输入vim--version|grepclipboard你会得到这... 查看详情

热键调用三方程序---实用方法(代码片段)

1.问题或需求描述:热键调用三方程序2.解决方法:使用AutoIt3脚本语言,可以快速编写出热键主调程序。3.例如:利用热键调用三方程序,实现特定需要。例程中,我们实现按“F4”键时调起三方程序,实现清除电脑上的所有蓝牙... 查看详情

shgreg的伟大指南:包,库,实用程序和工具(代码片段)

查看详情

jni/ndk开发指南——调用构造方法和父类实例方法(代码片段)

...ff0c;一带而过了。还没有阅读过的同学请移步《JNI/NDK开发指南(六)——C/C++访问Java实例方法和静态方法》阅读。这章详细来介绍下初始一个对象的两种方式&# 查看详情

使用monocecil对msil进行注入(代码片段)

...,内有Class1类型,我们需要动态创建其对象,并调用Test方法。注入的要求是在执行Test内部代码前先执行一个外部程序集的方法InjectMethod。 class Class1   void Test()      Console.WriteLine("Hello, World!");  注入代码&nb... 查看详情

javascriptyui配置实用程序指南(代码片段)

查看详情

binder实用指南-实战篇(代码片段)

本章的内容主要说明如何在JavaFramework层和Native层自定义Client-Server组件,并且使用Binder进行通信。一、NativeBinder源码目录结构:alps/frameworks/native/cmds/NativeBinderDemo/ 123456 |-NativeBinderDemo|---ClientDemo.cpp:客户端程序|---Serve 查看详情