Now I replace the ret instruction by using following code 
[....]

      Instruction popFTraceVariableInstruction = 
Instruction.Create(OpCodes.Stloc, fTraceVar);
      //Pop a value from stack and store into local variable at index.
      ilProcessor.InsertAfter(newConstructorInstruction, 
popFTraceVariableInstruction);

      var endFinally = Instruction.Create(OpCodes.Endfinally);
      var leave = Instruction.Create(OpCodes.Leave, endFinally);
      var ret = Instruction.Create(OpCodes.Ret);

      for (int i = 0; i < med.Body.Instructions.Count; i++)
      {
        Instruction instr = med.Body.Instructions[i];
        //Console.WriteLine(instr.ToString());
        if (instr.OpCode == OpCodes.Ret)
        {
          Instruction previous = instr.Previous;
          ilProcessor.Remove(instr);
          ilProcessor.InsertAfter(previous, 
Instruction.Create(OpCodes.Leave, ret));
        }
      }
      

      //////// Start Finally block
      Instruction loadFTraceVarInstruction = 
Instruction.Create(OpCodes.Ldloca, fTraceVar);
      ilProcessor.InsertAfter(med.Body.Instructions.Last(), 
loadFTraceVarInstruction); //Loads local variable onto stack
      //ilProcessor.InsertBefore(lastInstruction, 
loadFTraceVarInstruction); //Loads local variable onto stack

[...]
[...]

  ilProcessor.InsertAfter(callDisposeInstruction, endFinally);
      //ilProcessor.InsertAfter(leave, endFinally);
      Instruction nopInstruction = Instruction.Create(OpCodes.Nop);
      ilProcessor.InsertAfter(endFinally, nopInstruction);
      ilProcessor.InsertAfter(nopInstruction, ret);
   
      ///////// End finally block

      var handler = new ExceptionHandler(ExceptionHandlerType.Finally)
      {
        TryStart = med.Body.Instructions.First(),
        TryEnd = callDisposeInstruction,
        HandlerStart = callDisposeInstruction,
        HandlerEnd = nopInstruction,
        //CatchType = mod.Import(typeof(Exception)),
      };
[...]

PEVerify says: 
[IL]: Error: 
[O:\bin\x64\Debug\MeVis.BizLogic.Applications.LiverAnalysis.Viewing.ViewingCP.dll
 
: 
MeVis.BizLogic.Applications.LiverAnalysis.Viewing.ViewingCP.AbstractTaskStepBEHandler::Dispose][offset
 
0x000000A9] Stack underflow.
[IL]: Error: 
[O:\bin\x64\Debug\MeVis.BizLogic.Applications.LiverAnalysis.Viewing.ViewingCP.dll
 
: 
MeVis.BizLogic.Applications.LiverAnalysis.Viewing.ViewingCP.AbstractTaskStepBEHandler::set_IsActive][offset
 
0x00000027] jmp / exception into the middle of an instruction.
[IL]: Error: 
[O:\bin\x64\Debug\MeVis.BizLogic.Applications.LiverAnalysis.Viewing.ViewingCP.dll
 
:
.....


ARRRRGGGHHHHH

Am Donnerstag, 8. Januar 2015 16:35:31 UTC+1 schrieb Jb Evain:
>
> The error means you can not have a ret instruction inside a protected 
> block. 
>
> It means that if you're injecting protected blocks, you must make sure 
> that rets in them are replaced by into leave opcodes, that are jumping 
> outside of the protected block where you'll be able to return. 
>
> I'm afraid there's nothing built-in for this, you'll have to implement it. 
>
> Jb 
>
> On Thu, Jan 8, 2015 at 4:27 PM, Reh Gina <[email protected] <javascript:>> 
> wrote: 
> > Something with a return which ist not correct in try block, but how to I 
> > remove it. Trying this to get work for almost 2 weeks 
> > 
> > Am Donnerstag, 8. Januar 2015 16:25:13 UTC+1 schrieb Reh Gina: 
> >>> 
> >>> Now the correct file attached 
> > 
> > -- 
> > -- 
> > -- 
> > 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] <javascript:>. 
> > 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.

Reply via email to