From fee7cf82cdcfecfd358343ee6a2a97675f770286 Mon Sep 17 00:00:00 2001 From: Graham Date: Mon, 27 Jan 2020 21:24:16 +0000 Subject: [PATCH] Add Analyzer for creating control flow graphs --- .../deob/analysis/ControlFlowAnalyzer.kt | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 deob/src/main/java/dev/openrs2/deob/analysis/ControlFlowAnalyzer.kt diff --git a/deob/src/main/java/dev/openrs2/deob/analysis/ControlFlowAnalyzer.kt b/deob/src/main/java/dev/openrs2/deob/analysis/ControlFlowAnalyzer.kt new file mode 100644 index 0000000000..d75b8ef708 --- /dev/null +++ b/deob/src/main/java/dev/openrs2/deob/analysis/ControlFlowAnalyzer.kt @@ -0,0 +1,29 @@ +package dev.openrs2.deob.analysis + +import com.google.common.graph.Graph +import com.google.common.graph.GraphBuilder +import org.objectweb.asm.tree.MethodNode +import org.objectweb.asm.tree.analysis.Analyzer +import org.objectweb.asm.tree.analysis.BasicInterpreter +import org.objectweb.asm.tree.analysis.BasicValue + +class ControlFlowAnalyzer : Analyzer(BasicInterpreter()) { + private val graph = GraphBuilder + .directed() + .allowsSelfLoops(true) + .immutable() + + override fun newControlFlowEdge(insnIndex: Int, successorIndex: Int) { + graph.putEdge(insnIndex, successorIndex) + } + + override fun newControlFlowExceptionEdge(insnIndex: Int, successorIndex: Int): Boolean { + graph.putEdge(insnIndex, successorIndex) + return true + } + + fun createGraph(owner: String, method: MethodNode): Graph { + analyze(owner, method) + return graph.build() + } +}