0

我有一个小问题。我正在尝试在我创建的方法中插入带有 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.Cecil.dll 中发生了“System.ArgumentException”类型的未处理异常附加信息:OpCode

有人可以解释一下如何添加这些“更复杂”的指令吗?

4

1 回答 1

0

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

应该是

InstructionList.Add(Instruction.Create(OpCodes.Ret, null));
于 2014-12-30T08:06:18.803 回答