Yep, the array creation and initialization worked like a charm now.
Still, I havent got an answer for the replacment of ldc.i4's with the
fitting array element.
My attemp was this, its giving me an out of range exception.. :c
if (IsMutatable(MethodDef))
{
VariableDefinition VariableDef = new
VariableDefinition(string.Format("myarr_{0}", rnd.Next(1, int.MaxValue)),
TypeDef.Module.Import(typeof(int)));
ILProcessor ilp =
MethodDef.Body.GetILProcessor();
int IntegerAmount =
CountIntegers(MethodDef);
// Check if method has a body
if (MethodDef.HasBody)
{
int[] TestArray = new int[] { 1, 2, 3,
4, 120, 200, 1, 5, 7, 2, 500 };
List<Instruction> InstructionList =
CreateMSILArray(TypeDef, VariableDef, TestArray);
InstructionList.Reverse();
foreach (Instruction ArrayInstruction
in InstructionList)
{
MethodDef.Body.Instructions.Insert(0, ArrayInstruction);
}
MethodDef.Body.Variables.Add(VariableDef);
// Replace Integers with Array Element
Assignment
foreach (Instruction InstructionDef in
MethodDef.Body.Instructions)
{
if (InstructionDef.OpCode ==
OpCodes.Ldc_I4)
{
for (int i = 0; i <
InstructionList.Count; i++)
{
//if
((int)InstructionDef.Operand == (int)InstructionList[i].Operand )
//{
var newInstruction =
Instruction.Create(OpCodes.Ldloc_0);
ilp.Replace(InstructionDef,
newInstruction);
ilp.InsertAfter(newInstruction, Instruction.Create(OpCodes.Ldc_I4, i));
ilp.InsertAfter(newInstruction.Next, Instruction.Create(OpCodes.Ldelem_I4));
Console.WriteLine("Replaced
one integer with array element.");
// }
}
}
}
}
<http://puu.sh/cpcm8/d885cdde01.png>
The problem must be somewhere here, where i try to replace the ldc.i4 with
the array element.
Do you have an idea why that is happening? :/
--
--
--
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.