From f77c9720a628b4d4d719ec2c2a2faaf79184f189 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Mon, 29 Apr 2024 01:08:04 +0300 Subject: [PATCH] Avoid unnecessarily initializing disassembler --- include/capstone.hpp | 1 + src/lua.cpp | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/capstone.hpp b/include/capstone.hpp index e4d6b7d7..c08a4169 100644 --- a/include/capstone.hpp +++ b/include/capstone.hpp @@ -14,6 +14,7 @@ namespace Common { bool initialized = false; public: + bool isInitialized() { return initialized; } void init(cs_arch arch, cs_mode mode) { initialized = (cs_open(arch, mode, &handle) == CS_ERR_OK); } CapstoneDisassembler() {} diff --git a/src/lua.cpp b/src/lua.cpp index e835d463..6a16ab5b 100644 --- a/src/lua.cpp +++ b/src/lua.cpp @@ -209,7 +209,11 @@ static int getButtonThunk(lua_State* L) { } static int disassembleARMThunk(lua_State* L) { - static Common::CapstoneDisassembler disassembler(CS_ARCH_ARM, CS_MODE_ARM); + static Common::CapstoneDisassembler disassembler; + // We want the disassembler to only be fully initialized when this function is first used + if (!disassembler.isInitialized()) { + disassembler.init(CS_ARCH_ARM, CS_MODE_ARM); + } const u32 pc = u32(lua_tonumber(L, 1)); const u32 instruction = u32(lua_tonumber(L, 2));