#include "disassembler/llvm/LLVMDisassembler.hxx"
#include "disassembler/llvm/LLVMBasicBlock.hxx"
#include "disassembler/llvm/LLVMFunction.hxx"
+#include "core/InformationManager.hxx"
#include <stack>
#include <algorithm>
readSymbols();
readSections();
disassemble();
+ readDynamicSymbols();
}
template <typename ELFT>
}
if (binary->isELF()) {
- typedef ELFFile<ELFT> ELFO;
const ELFO * elffile = o->getELFFile();
const typename ELFO::Elf_Ehdr * header = elffile->getHeader();
}
}
+template <typename ELFT>
+void LLVMDisassembler<ELFT>::readDynamicSymbols() {
+ const ELFO * elffile = o->getELFFile();
+ for (typename ELFO::Elf_Sym_Iter
+ it = elffile->begin_dynamic_symbols(),
+ end = elffile->end_dynamic_symbols();
+ it != end;
+ ++it) {
+ if (it->getType() == 2) { // Function
+ bool is_default;
+ // TODO: Error handling
+ std::string symbolname = *(elffile->getSymbolName(it));
+ std::string symbolversion = *(elffile->getSymbolVersion(nullptr, &*it, is_default));
+ manager->signal_new_dyn_symbol(symbolname + (is_default? "@@" : "@") + symbolversion);
+ LOG4CXX_DEBUG(logger, "Adding dynamic Symbol " << symbolname << (is_default? "@@" : "@") << symbolversion);
+ }
+ }
+}
+
template <typename ELFT>
void LLVMDisassembler<ELFT>::readSymbols() {
error_code ec;