Hello,
I am trying to replace a ldstr instruction with a local variable that
should hold the string value and then be replaced with the ldstr
instruction.
I tried this, but I can't get it to work:
private static void InsertLocal(TypeDefinition TypeDef, MethodDefinition
MethodDef, ILProcessor Ilp)
{
foreach (Instruction Instr in MethodDef.Body.Instructions)
{
if (Instr.OpCode == OpCodes.Ldstr)
{
VariableDefinition VariableDef = new
VariableDefinition(string.Format("num_{0}", rnd.Next(1, int.MaxValue)),
TypeDef.Module.Import(typeof(string)));
MethodDef.Body.Variables.Add(VariableDef);
Ilp.InsertBefore(Instr,
Instruction.Create(OpCodes.Ldstr, Instr.Operand.ToString()));
Ilp.Replace(Instr, Instruction.Create(OpCodes.Stloc_S,
VariableDef));
Ilp.InsertAfter(Instr,
Instruction.Create(OpCodes.Ldloc_S, VariableDef));
Console.WriteLine("Replaced a string");
}
}
}
This produces a OutOfRange Exception:
<http://puu.sh/car3q/b4e0e74723.png>
Can someone help me out?
--
--
--
mono-cecil
---
You received this message because you are subscribed to the Google Groups
"mono-cecil" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.