@@ -305,10 +305,22 @@ private void InstrumentModule()
305
305
onProcessExitIl . InsertAfter ( lastInst , firstNullParam ) ;
306
306
onProcessExitIl . InsertAfter ( firstNullParam , secondNullParam ) ;
307
307
onProcessExitIl . InsertAfter ( secondNullParam , callUnload ) ;
308
+ var endFinally = Instruction . Create ( OpCodes . Endfinally ) ;
309
+ onProcessExitIl . InsertAfter ( callUnload , endFinally ) ;
308
310
var ret = onProcessExitIl . Create ( OpCodes . Ret ) ;
309
- var leave = onProcessExitIl . Create ( OpCodes . Leave , ret ) ;
310
- onProcessExitIl . InsertAfter ( callUnload , leave ) ;
311
- onProcessExitIl . InsertAfter ( leave , ret ) ;
311
+ var leaveAfterFinally = onProcessExitIl . Create ( OpCodes . Leave , ret ) ;
312
+ onProcessExitIl . InsertAfter ( endFinally , ret ) ;
313
+ foreach ( var inst in onProcessExitMethod . Body . Instructions . ToArray ( ) )
314
+ {
315
+ // Patch ret to leave after the finally
316
+ if ( inst . OpCode == OpCodes . Ret && inst != ret )
317
+ {
318
+ var leaveBodyInstAfterFinally = onProcessExitIl . Create ( OpCodes . Leave , ret ) ;
319
+ var prevInst = inst . Previous ;
320
+ onProcessExitMethod . Body . Instructions . Remove ( inst ) ;
321
+ onProcessExitIl . InsertAfter ( prevInst , leaveBodyInstAfterFinally ) ;
322
+ }
323
+ }
312
324
var handler = new ExceptionHandler ( ExceptionHandlerType . Finally )
313
325
{
314
326
TryStart = onProcessExitIl . Body . Instructions . First ( ) ,
0 commit comments