Jump to content
Tuts 4 You

Mono.Cecil Patch


high6

Recommended Posts

Open "Mono.Cecil.Cil/CodeWriter.cs"

Find "ComputeMaxStack"

Add this line above it "if (!CodeWriter.FixedMaxStack)"

Add field to the CodeWriter class "public static bool FixedMaxStack = false;"

CodeWriter.FixedMaxStack = true;

Reason for this patch is because otherwise Cecil will attempt to recompute the MaxStacks. It does not work on obfuscated code. For example

 ldc_i4 0
ldc_i4 0
ldc_i4 0
ldc_i4 0
br lb2
lb1:
ret
lb2:
ldc_i4 0
ldc_i4 0
ldc_i4 0
ldc_i4 0
br lb1

Cecil will compute it as 5 when it really is 8. Causing a stack overflow (InvalidProgramException) when it runs.

Link to comment
  • 4 weeks later...
  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...