From ee2835d6580d42379c2777428cdec2b4075cdad7 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 16 Aug 2025 13:48:52 +0200 Subject: [PATCH] Enable instruction details --- src/analyzer/analysis.cpp | 2 +- src/analyzer/disassembler.cpp | 24 ++++++++++++++++++------ src/analyzer/disassembler.hpp | 1 - 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/analyzer/analysis.cpp b/src/analyzer/analysis.cpp index f2cd6b2a..8a2e3ecf 100644 --- a/src/analyzer/analysis.cpp +++ b/src/analyzer/analysis.cpp @@ -251,7 +251,7 @@ namespace return false; } - return cs_insn_group(disasm.get_handle(), &instructions[0], CS_GRP_RET); + return cs_insn_group(disasm.get_handle(), instructions.data(), CS_GRP_RET); } void handle_instruction(analysis_context& c, const uint64_t address) diff --git a/src/analyzer/disassembler.cpp b/src/analyzer/disassembler.cpp index 160a4e92..f4fd4004 100644 --- a/src/analyzer/disassembler.cpp +++ b/src/analyzer/disassembler.cpp @@ -1,14 +1,26 @@ #include "std_include.hpp" - #include "disassembler.hpp" +#include + +namespace +{ + void cse(const cs_err error) + { + if (error != CS_ERR_OK) + { + throw std::runtime_error(cs_strerror(error)); + } + } +} disassembler::disassembler() { - const auto res = cs_open(CS_ARCH_X86, CS_MODE_64, &this->handle_); - if (res != CS_ERR_OK) - { - throw std::runtime_error("Failed to initialize capstone"); - } + auto deleter = utils::finally([&] { this->release(); }); + + cse(cs_open(CS_ARCH_X86, CS_MODE_64, &this->handle_)); + cse(cs_option(this->handle_, CS_OPT_DETAIL, CS_OPT_ON)); + + deleter.cancel(); } disassembler::~disassembler() diff --git a/src/analyzer/disassembler.hpp b/src/analyzer/disassembler.hpp index c055bb20..1397a501 100644 --- a/src/analyzer/disassembler.hpp +++ b/src/analyzer/disassembler.hpp @@ -1,7 +1,6 @@ #pragma once #include -#include class instructions {