C# 如何在Mono.Cecil中创建Ldarg_指令?
在Mono.Cecil中,当使用C# 如何在Mono.Cecil中创建Ldarg_指令?,c#,mono,C#,Mono,在Mono.Cecil中,当使用Ldarg_S创建指令时,简单的方法是: Instruction.Create(OpCodes.Ldarg_S, 4); 不工作,因为操作数类型为操作数类型.InlineI,而操作码.Ldarg_S的操作数类型为ShortInlineArg。相反,我需要使用重载 这需要初始化参数定义,而该定义又需要以下参数: 字符串名称 ParameterAttributes属性 TypeReference参数type 那些是什么东西?如何指定只需要第四个(或第五个或第六个
Ldarg_S
创建指令时,简单的方法是:
Instruction.Create(OpCodes.Ldarg_S, 4);
不工作,因为操作数类型为操作数类型.InlineI
,而操作码.Ldarg_S
的操作数类型为ShortInlineArg
。相反,我需要使用重载
这需要初始化参数定义
,而该定义又需要以下参数:
字符串名称
ParameterAttributes属性
TypeReference参数type
那些是什么东西?如何指定只需要第四个(或第五个或第六个)参数?在深入检查Mono.Cecil的源代码后,似乎无法生成像
ldarg.s4
这样简单的指令
相反,Mono.Cecil需要您指定ParameterDefinition
,然后将其与方法的参数列表匹配,以找到实际索引
最简单的方法是使用MethodDefinition.Parameters
属性按索引检索相应的参数,并将其传递给指令。创建。这种方法的目标可能是通过指定一个给定的参数并让Mono.Cecil确定实际的索引,使调用者能够更安全地管理参数。实际上,调用方确定实际索引可能有点棘手,尤其是在实例方法中,ldarg.0
引用的是这个
,而不是实际的第一个参数