diff --git a/cfg/builder.cpp b/cfg/builder.cpp index 48222d8..5ecbb11 100644 --- a/cfg/builder.cpp +++ b/cfg/builder.cpp @@ -633,6 +633,8 @@ CFG CFGBuilder::build() auto it = imp_map.find(a); if (it != imp_map.end()) name = it->second; } + if (name.empty()) + name = m_bin->getSymbolName(a); auto func = buildFunction(a, name); if (isEmpty(func)) continue; @@ -659,7 +661,8 @@ CFG CFGBuilder::build() a = skipEndbr64(a); if (built.count(a)) continue; - auto func = buildFunction(a, ""); + string sym_name = m_bin->getSymbolName(a); + auto func = buildFunction(a, sym_name); if (isEmpty(func)) continue; setEndAddress(func); cfg.functions.push_back(func); diff --git a/loader/binary.hpp b/loader/binary.hpp index d66a9dc..bd03ff8 100644 --- a/loader/binary.hpp +++ b/loader/binary.hpp @@ -42,6 +42,10 @@ class Binary return {}; } virtual const string& getPath() const = 0; + virtual string getSymbolName(addr_t addr) const + { + return {}; + } static unique_ptr create(const string& path); }; diff --git a/loader/elf.hpp b/loader/elf.hpp index 6cf58bb..e273d4c 100644 --- a/loader/elf.hpp +++ b/loader/elf.hpp @@ -21,6 +21,11 @@ class ELFLoader : public Binary vector> getExportedFunctions() const override; vector getImportedFunctions() const override; const string& getPath() const override { return m_path; } + string getSymbolName(addr_t addr) const override + { + auto it = m_symbols.find(addr); + return it != m_symbols.end() ? it->second : string(); + } addr_t getInitArray() const { return m_init_array; } addr_t getFiniArray() const { return m_fini_array; }