2

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

非常感谢!

4

1 回答 1

1

要更改指令代码,您可以使用Mono.Cecil.Cil.OpCodes枚举。

mDef.Body.Instructions(i).OpCode = Mono.Cecil.Cil.OpCodes.Ldstr;

如果要插入或发出新指令,可以使用Mono.Cecil.Cil.ILProcessorobject.

mDef.Body.GetILProcessor().InsertBefore(targetInstruction, Instruction.Create(OpCodes.Ldstr, "New string"));
于 2013-09-25T14:16:41.863 回答