Hi, What does peverify say on the resulting binary?
Jb On Mon, Nov 17, 2014 at 3:17 PM, BlackSky Blacksky <[email protected]> wrote: > Hey guys, > > I am trying to create a switch statement which should return a string > value. > A similar example what I am trying to reproduce could look like this: > > <http://puu.sh/cUuAi/e3f8482007.png> > > > That is my attempt creating the switch statement: > > > private static MethodDefinition CreateSwitchMethod(AssemblyDefinition > AssemblyDef, string ReturnValue, int AmountOfCases) > { > // Create a new Methoddefinition > MethodDefinition NewMethod = new > MethodDefinition("SwitchMethodTest", MethodAttributes.Public | > MethodAttributes.Static, AssemblyDef.MainModule.Import(typeof(string))); > > // Create Switch Method Body > ILProcessor ilp = NewMethod.Body.GetILProcessor(); > List<Instruction> InstrList = new List<Instruction>(); > Instruction[] Switches = new Instruction[5]; > > Switches[0] = ilp.Create(OpCodes.Ldstr, " "); > Switches[1] = ilp.Create(OpCodes.Ldstr, " "); > Switches[2] = ilp.Create(OpCodes.Ldstr, " "); > Switches[3] = ilp.Create(OpCodes.Ldstr, ReturnValue); > Switches[4] = ilp.Create(OpCodes.Ldstr, " "); > > // Add Isntructions to methodbody > InstrList.Add(ilp.Create(OpCodes.Ldc_I4, 3)); > InstrList.Add(ilp.Create(OpCodes.Stloc_0)); > InstrList.Add(ilp.Create(OpCodes.Ldloc_0)); > InstrList.Add(ilp.Create(OpCodes.Stloc_1)); > InstrList.Add(ilp.Create(OpCodes.Ldloc_1)); > InstrList.Add(ilp.Create(OpCodes.Switch, Switches)); > InstrList.Add(Switches[0]); > InstrList.Add(ilp.Create(OpCodes.Ret)); > InstrList.Add(Switches[1]); > InstrList.Add(ilp.Create(OpCodes.Ret)); > InstrList.Add(Switches[2]); > InstrList.Add(ilp.Create(OpCodes.Ret)); > InstrList.Add(Switches[3]); > InstrList.Add(ilp.Create(OpCodes.Ret)); > InstrList.Add(Switches[4]); > InstrList.Add(ilp.Create(OpCodes.Ret)); > > foreach (Instruction Instr in InstrList) > { > NewMethod.Body.Instructions.Add(Instr); > } > > return NewMethod; > } > > > And thats how I call it: > > > MethodDefinition MethodDef = CreateSwitchMethod(AssemblyDef, "Test with > Switch", 3); > > > The problem is that the output is somehow invalid: > > <http://puu.sh/cUuGi/c1d63f837f.png> > > <http://puu.sh/cUuF1/f318e66733.png> > > > Can someone explain me why that happens and how I can fix that? > > -- > -- > -- > 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. > -- -- -- 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.
