Mono.Cecil创建新指令

本文关键字:指令 新指令 Cecil 创建 Mono | 更新日期: 2023-09-27 18:22:04

我有一个小问题。我试图在我创建的方法中插入Mono.Cecil的指令集。

Collection<Instruction> InstructionList = new Collection<Instruction>();

要添加一条没有操作数的普通指令,例如"Ret"或"ldarg.0",我只需要这样做:

InstructionList.Add(Instruction.Create(OpCodes.Ret));

但我在创建一个有这样操作数的指令时遇到了问题(图像):

http://puu.sh/bzWi8/710c8008df.png

有人能解释一下如何用这些操作数添加指令吗,比如ldsfld空字符串、br.s或callvirt。

我不知道该怎么做。

我的尝试是:

InstructionList.Add(Instruction.Create(OpCodes.Ldsfld, ModuleDef.Import(typeof(System.String))));

但这引发了一个异常:Mono.ecil.dll中发生了"System.ArgumentException"类型的未处理异常附加信息:OpCode

有人能解释一下如何添加这些"更复杂"的说明吗?

Mono.Cecil创建新指令

InstructionList.Add(Instruction.Create(OpCodes.Ret));

应该是

InstructionList.Add(Instruction.Create(OpCodes.Ret, null));