From a17713a9a1482d701a071198a287348bd9b07a54 Mon Sep 17 00:00:00 2001 From: OmniBlade Date: Tue, 9 Jan 2024 14:39:02 +0000 Subject: [PATCH] Fix issues with dumping and loading symbols Zero size symbols now load from config. Addressed dumped from binary now always include the base image offset. --- executable.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/executable.cpp b/executable.cpp index b8b6a0a..7d09fa9 100644 --- a/executable.cpp +++ b/executable.cpp @@ -73,7 +73,8 @@ unassemblize::Executable::Executable(const char *file_name, OutputFormats format for (auto it = exe_syms.begin(); it != exe_syms.end(); ++it) { if (it->value() != 0 && !it->name().empty() && m_symbolMap.find(it->value()) == m_symbolMap.end()) { - m_symbolMap.insert({it->value(), Symbol(it->name(), it->value(), it->size())}); + uint64_t value = it->value() > m_binary->imagebase() ? it->value() : it->value() + m_binary->imagebase(); + m_symbolMap.insert({it->value(), Symbol(it->name(), value, it->size())}); } } @@ -81,8 +82,9 @@ unassemblize::Executable::Executable(const char *file_name, OutputFormats format for (auto it = exe_imports.begin(); it != exe_imports.end(); ++it) { if (it->value() != 0 && !it->name().empty() && m_symbolMap.find(it->value()) == m_symbolMap.end()) { + uint64_t value = it->value() > m_binary->imagebase() ? it->value() : it->value() + m_binary->imagebase(); m_loadedSymbols.push_back(it->name()); - m_symbolMap.insert({it->value(), Symbol(m_loadedSymbols.back(), it->value(), it->size())}); + m_symbolMap.insert({it->value(), Symbol(m_loadedSymbols.back(), value, it->size())}); } } } @@ -252,10 +254,6 @@ void unassemblize::Executable::load_symbols(nlohmann::json &js) it->at("size").get_to(size); - if (size == 0) { - continue; - } - // Only load symbols for addresses we don't have any symbol for yet. if (m_symbolMap.find(addr) == m_symbolMap.end()) { m_loadedSymbols.push_back(name);