From 87a74e20017fd698ce0b6eea8135fc354575e7f6 Mon Sep 17 00:00:00 2001 From: Sajid Date: Fri, 13 Sep 2024 16:13:37 +0600 Subject: [PATCH] Handle invalid instructions as end block --- PowerAnalyse/function.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/PowerAnalyse/function.cpp b/PowerAnalyse/function.cpp index cff1e05..b3c8127 100644 --- a/PowerAnalyse/function.cpp +++ b/PowerAnalyse/function.cpp @@ -120,7 +120,7 @@ Function Function::Analyze(const void* code, size_t size, size_t base) RESTORE_DATA(); } - else if (op == PPC_OP_B || instruction == 0 || insn.opcode->id == PPC_INST_BLR) // b, blr, end padding + else if (op == PPC_OP_B || instruction == 0 || (insn.opcode != nullptr && insn.opcode->id == PPC_INST_BLR)) // b, blr, end padding { if (!isLink) { @@ -173,6 +173,11 @@ Function Function::Analyze(const void* code, size_t size, size_t base) RESTORE_DATA(); } } + else if (insn.opcode == nullptr) + { + blockStack.pop_back(); + RESTORE_DATA(); + } } // Sort and invalidate discontinuous blocks