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