Hey Ian,

You'd need to update the branch instruction as well to target the
replaced instructions.

Jb

On Sat, Mar 12, 2016 at 5:16 PM, Ian Ornelas <[email protected]> wrote:
> After replacing some instructions that are the target of jumps, the target
> references still point to the old,
> removed instructions, this causes the removed instruction to be used as the
> key for the stack_sizes
> dictionary, so the new target instructions completely ignore the transferred
> stack_size.
>
> Here is an example log showing the changing stack sizes, the associated
> entry in the stack_sizes dictionary for each instruction, and the actual
> instruction where the branch stack_size is being copied to (note  that those
> instructions were replaced).
>
>
>> Stack Size | Branch Stack Size | Instruction
>>
>> ...
>>  1 | x | IL_00f8: ldarg.0
>>  1 | x | IL_00f9: ldfld System.Collections.Generic.Queue`1<System.String>
>> StardewValley.Minigames.GrandpaStory::grandpaSpeech
>>  2 | x | IL_00fe: ldstr "Quando isso acontecer,"
>>  3 | x | IL_0103: ldsfld StardewValley.Farmer StardewValley.Game1::player
>>  3 | x | IL_0108: ldfld System.Boolean StardewValley.Farmer::isMale
>>
>>
>> Copying branch stack to IL_0116: ldstr " my boy,"
>>  2 | x | IL_010d: brtrue.s IL_0116
>>  3 | x | IL_010f: ldstr " minha querida, você estará pronta"
>>
>>
>> Copying branch stack to IL_011b: ldstr " you'll be ready for this gift."
>>  0 | x | IL_0114: br.s IL_011b
>>  1 | x | IL_0116: ldstr " meu garoto, você estará pronto"
>>  2 | x | IL_011b: ldstr " para esse presente."
>>  0 | x | IL_0120: call System.String
>> System.String::Concat(System.String,System.String,System.String)
>> -2 | x | IL_0125: callvirt System.Void
>> System.Collections.Generic.Queue`1<System.String>::Enqueue(!0)
>> -1 | x | IL_012a: ldarg.0
>> ...
>
>
>
> As the example shows, it can lead to negative stack_size and incorrect
> .maxstack .
>
> --
> --
> --
> 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.

Reply via email to