如何编辑指令的操作码?

时间:2013-07-23 14:36:35

标签: .net cil il mono.cecil

我在.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

非常感谢!

1 个答案:

答案 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"));