From 830d61cc48f771663e1af9261ec96b7be506c145 Mon Sep 17 00:00:00 2001 From: walon Date: Sun, 15 Jun 2025 10:55:09 +0800 Subject: [PATCH] =?UTF-8?q?BasicBlockCollection=E6=96=B0=E5=A2=9E=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=86=B3=E5=AE=9A=E6=98=AF=E5=90=A6=E8=AE=A1=E7=AE=97?= =?UTF-8?q?inLoop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/Emit/BasicBlockCollection.cs | 9 ++++++++- Editor/ObfusPasses/BasicBlockObfuscationPassBase.cs | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) 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;