我在.NET中编写应用程序来编辑任何方法的指令。我想把ldstr放在OpCode中,并在Operand中放一个字符串。 Mono.Cecil允许我设置操作数,但问题是OpCode是一个ReadOnly属性。有没有办法编辑OpCode? 为此我使用此代码:
Dim assembly1 As AssemblyDefinition
assembly1 = AssemblyDefinition.ReadAssembly(rute)
For Each modDef In assembly1.Modules
For Each typeDef In modDef.Types
For Each mDef In typeDef.Methods
For i = 0 To mDef.Body.Instructions.Count - 1
mDef.Body.Instructions(i).OpCode.Code = Mono.Cecil.Cil.Code.ldstr
mDef.Body.Instructions(i).Operand = "Text"
Next
Next
Next
Next
非常感谢!
答案 0 :(得分:1)
要更改指令代码,您可以使用Mono.Cecil.Cil.OpCodes
枚举。
mDef.Body.Instructions(i).OpCode = Mono.Cecil.Cil.OpCodes.Ldstr;
如果要插入或发出新指令,可以使用Mono.Cecil.Cil.ILProcessor
对象。
mDef.Body.GetILProcessor().InsertBefore(targetInstruction, Instruction.Create(OpCodes.Ldstr, "New string"));