From 774eb18a4225f4f9650a3b8dced42d279c13c8ef Mon Sep 17 00:00:00 2001 From: WerWolv Date: Fri, 28 Feb 2025 12:04:47 +0100 Subject: [PATCH] impr: Make custom disassemblers reload on run --- lib/external/disassembler | 2 +- .../content/disassemblers/custom_architectures.cpp | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/external/disassembler b/lib/external/disassembler index a2217dd3b..bb343eb02 160000 --- a/lib/external/disassembler +++ b/lib/external/disassembler @@ -1 +1 @@ -Subproject commit a2217dd3bca9e3bdc284b163a35eb7d300937728 +Subproject commit bb343eb028195e46c1734c31edf121b1dc92681b diff --git a/plugins/disassembler/source/content/disassemblers/custom_architectures.cpp b/plugins/disassembler/source/content/disassemblers/custom_architectures.cpp index 275b3202f..c89d6d266 100644 --- a/plugins/disassembler/source/content/disassemblers/custom_architectures.cpp +++ b/plugins/disassembler/source/content/disassemblers/custom_architectures.cpp @@ -10,9 +10,11 @@ namespace hex::plugin::disasm { class CustomArchitecture : public ContentRegistry::Disassembler::Architecture { public: - CustomArchitecture(::disasm::spec::Spec spec) : Architecture(spec.getName()), m_spec(std::move(spec)) {} + CustomArchitecture(std::string name, std::fs::path path) : Architecture(std::move(name)), m_path(std::move(path)) {} bool start() override { + m_spec = ::disasm::spec::Loader::load(m_path, { m_path.parent_path() }); + return true; } @@ -30,7 +32,7 @@ namespace hex::plugin::disasm { std::ignore = instructionLoadAddress; std::ignore = code; - auto instructions = m_spec.disassemble(code, 1); + const auto instructions = m_spec.disassemble(code, 1); if (instructions.empty()) { return std::nullopt; } @@ -53,7 +55,9 @@ namespace hex::plugin::disasm { } private: + std::fs::path m_path; ::disasm::spec::Spec m_spec; + }; void registerCustomArchitectures() { @@ -65,7 +69,7 @@ namespace hex::plugin::disasm { try { auto spec = ::disasm::spec::Loader::load(entry.path(), { entry.path().parent_path() }); - ContentRegistry::Disassembler::add(std::move(spec)); + ContentRegistry::Disassembler::add(spec.getName(), entry.path()); } catch (const std::exception &e) { log::error("Failed to load disassembler config '{}': {}", wolv::util::toUTF8String(entry.path()), e.what()); }