diff --git a/Editor/Emit/BasicBlockCollection.cs b/Editor/Emit/BasicBlockCollection.cs index 5c0c3b0..2dda874 100644 --- a/Editor/Emit/BasicBlockCollection.cs +++ b/Editor/Emit/BasicBlockCollection.cs @@ -38,13 +38,20 @@ namespace Obfuz.Emit public IList Blocks => _blocks; - public BasicBlockCollection(MethodDef method) + public BasicBlockCollection(MethodDef method, bool computeInLoop) { _method = method; HashSet splitPoints = BuildSplitPoint(method); BuildBasicBlocks(method, splitPoints); BuildInOutGraph(method); + if (computeInLoop) + { + ComputeBlocksInLoop(); + } + } + public void ComputeBlocksInLoop() + { var loopBlocks = FindLoopBlocks(_blocks); foreach (var block in loopBlocks) { diff --git a/Editor/ObfusPasses/BasicBlockObfuscationPassBase.cs b/Editor/ObfusPasses/BasicBlockObfuscationPassBase.cs index ce98a33..3ce89ee 100644 --- a/Editor/ObfusPasses/BasicBlockObfuscationPassBase.cs +++ b/Editor/ObfusPasses/BasicBlockObfuscationPassBase.cs @@ -10,6 +10,8 @@ namespace Obfuz.ObfusPasses { protected abstract bool NeedObfuscateMethod(MethodDef method); + protected virtual bool ComputeBlockInLoop => true; + public override void Process() { var ctx = ObfuscationPassContext.Current; @@ -48,7 +50,7 @@ namespace Obfuz.ObfusPasses private void ObfuscateData(MethodDef method) { - BasicBlockCollection bbc = new BasicBlockCollection(method); + BasicBlockCollection bbc = new BasicBlockCollection(method, ComputeBlockInLoop); IList instructions = method.Body.Instructions;