From 3c05c7a607c2720adc6e82e72ce226f0775f97b6 Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Thu, 17 Jul 2025 18:53:07 +0200 Subject: [PATCH] Small fixes --- src/analyzer/tenet_tracer.cpp | 31 +++++++++++++++---------------- src/analyzer/tenet_tracer.hpp | 12 ++++-------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/src/analyzer/tenet_tracer.cpp b/src/analyzer/tenet_tracer.cpp index 2cc62a37..e66ae1cd 100644 --- a/src/analyzer/tenet_tracer.cpp +++ b/src/analyzer/tenet_tracer.cpp @@ -1,4 +1,5 @@ #include "tenet_tracer.hpp" +#include "scoped_hook.hpp" #include #include @@ -32,24 +33,21 @@ TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filen } // Set up memory hooks. auto& emu = m_win_emu.emu(); - m_read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, - [this](uint64_t a, const void* d, size_t s) { this->log_memory_read(a, d, s); }); - m_write_hook = emu.hook_memory_write( - 0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { this->log_memory_write(a, d, s); }); + auto* read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { + this->log_memory_read(a, d, s); // + }); + + m_read_hook = scoped_hook(emu, read_hook); + + auto* write_hook = emu.hook_memory_write(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { + this->log_memory_write(a, d, s); // + }); + + m_write_hook = scoped_hook(emu, write_hook); } TenetTracer::~TenetTracer() { - auto& emu = m_win_emu.emu(); - if (m_read_hook) - { - emu.delete_hook(m_read_hook); - } - if (m_write_hook) - { - emu.delete_hook(m_write_hook); - } - // Filter and write the buffer when the program ends. filter_and_write_buffer(); @@ -94,15 +92,14 @@ void TenetTracer::filter_and_write_buffer() const auto* exe_module = m_win_emu.mod_manager.executable; if (!exe_module) { - // If there is no main module, write the raw data and exit. for (const auto& line : m_raw_log_buffer) { m_log_file << line << '\n'; } + return; } - // Always write the first line (initial registers). if (!m_raw_log_buffer.empty()) { m_log_file << m_raw_log_buffer.front() << '\n'; @@ -194,6 +191,7 @@ void TenetTracer::log_memory_read(uint64_t address, const void* data, size_t siz { m_mem_read_log << ";"; } + m_mem_read_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); } @@ -203,6 +201,7 @@ void TenetTracer::log_memory_write(uint64_t address, const void* data, size_t si { m_mem_write_log << ";"; } + m_mem_write_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); } diff --git a/src/analyzer/tenet_tracer.hpp b/src/analyzer/tenet_tracer.hpp index e3acd3aa..1a0c0b9d 100644 --- a/src/analyzer/tenet_tracer.hpp +++ b/src/analyzer/tenet_tracer.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -37,13 +38,8 @@ class TenetTracer TenetTracer(windows_emulator& win_emu, const std::string& log_filename); ~TenetTracer(); - // A new public method to call TenetTracer for each instruction. void process_instruction(uint64_t address); - // Disable copy and move operations. - TenetTracer(const TenetTracer&) = delete; - TenetTracer& operator=(const TenetTracer&) = delete; - private: void filter_and_write_buffer(); void log_memory_read(uint64_t address, const void* data, size_t size); @@ -64,6 +60,6 @@ class TenetTracer std::stringstream m_mem_write_log; // To manage memory hooks. - emulator_hook* m_read_hook = nullptr; - emulator_hook* m_write_hook = nullptr; -}; \ No newline at end of file + scoped_hook m_read_hook; + scoped_hook m_write_hook; +};